C# 在Windows中获取OneDrive路径
我有一个C#WPF应用程序,我正试图找到一种方法来获取Windows中根OneDrive目录的路径。如何以编程方式执行此操作?我在网上搜索过,但什么也没找到。我希望我能提供一些代码,但我没有线索;我的意思是,我检查了系统环境变量,在我的机器上找不到任何东西,我认为这可能是一个有效的解决方案,但它没有显示任何东西。在我的Windows 8.1计算机上,保存此信息的注册表项是:C# 在Windows中获取OneDrive路径,c#,.net,wpf,path,onedrive,C#,.net,Wpf,Path,Onedrive,我有一个C#WPF应用程序,我正试图找到一种方法来获取Windows中根OneDrive目录的路径。如何以编程方式执行此操作?我在网上搜索过,但什么也没找到。我希望我能提供一些代码,但我没有线索;我的意思是,我检查了系统环境变量,在我的机器上找不到任何东西,我认为这可能是一个有效的解决方案,但它没有显示任何东西。在我的Windows 8.1计算机上,保存此信息的注册表项是:HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersio
HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\SkyDrive\UserFolder
我会尝试使用以下方法:
我还在下面找到了路径:
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\SkyDrive\UserSyncRoots\S-1-5-21-2696997101-1021499815-432504798-1004
HKEY_USERS\S-1-5-21-2696997101-1021499815-432504798-1004\Software\Microsoft\Windows\CurrentVersion\SkyDrive\UserFolder
您可以使用%UserProfile%\SkyDrive路径吗?我使用常量FOLDERID\u SkyDrive()和答案中的“GetKnownFolderPath”方法获取OneDrive文件夹的位置 虽然环境变量“USERPROFILE”与“\OneDrive”组合有时会起作用,但如果用户移动了他们的OneDrive文件夹,环境变量实际上将是一个重新分析点,而不是实际位置 在Windows10上测试
Guid FOLDERID_SkyDrive = new Guid("A52BBA46-E9E1-435f-B3D9-28DAA648C0F6");
location = GetKnownFolderPath(FOLDERID_SkyDrive);
您必须在注册表下找到路径。。。首先从搜索框中运行regedit,然后在软件-Microsoft-查找OneDrive下运行 然后将该路径用于子键字符串 const string subkey=@“Software\Microsoft\OneDrive”
随着windows 10的最新更新,Microsoft引入了新的环境变量%OneDrive%,我在2017年4月的更新(Creators update)中检查了它,它就在那里 这对我很有用(Windows10Pro,1803):
在VBA使用环境(“OneDriveConsumer”)中,为完整起见,似乎设置了3个环境变量: OneDrive OneDriveConsumer OneDriveCommercial 在我的例子中,第一个和最后一个是相同的(我的OneDrive for Business帐户),中间一个是我的个人OneDrive。我在加入域的PC和未加入域的PC上看到了相同的结果,但都配置了OneDrive。在只有我的personal OneDrive的非域连接PC上,OneDrive环境变量指向personal OneDrive 我找不到任何有关此的Microsoft文档,但我认为最好忽略OneDrive变量,只使用消费者/商业文档来查找OneDrive文件夹
Steve如果您使用的是PowerShell,您可以使用:
$ENV:onedrive注册表在某些PC上不适用于我。 然而,这对我来说很有效:
using System;
using System.IO;
DirectoryInfo di = DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
string path = di.Parent.FullName;
要跟踪这些OneDrive环境变量(它将显示以“一”开头的所有环境变量),请执行以下操作: 从CMD:
$>set one
OneDrive=C:\Users\my_username\OneDrive - COMPANY
OneDriveCommercial=C:\Users\my_username\OneDrive - COMPANY
OneDriveConsumer=C:\Users\my_username\OneDrive
来自PowerShell:
$>dir env: | Where-Object {$_.Name -like "one*"}
OneDrive=C:\Users\my_username\OneDrive - COMPANY
OneDriveCommercial=C:\Users\my_username\OneDrive - COMPANY
OneDriveConsumer=C:\Users\my_username\OneDrive
或
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\SkyDrive\UserSyncRoots”怎么办?我的注册表中有一个条目,它位于“S-1-5-21-3897053772-1539939438-3998215170-1142”项下,这是您当前用户配置文件的安全标识符。我认为这是目前已知的唯一检测OneDrive路径的方法。我不建议您使用最后两条路径,您还需要获取用户SID。从技术上讲,如果当前用户在那里看到了SID,那么最后一条路径就是第一条路径。目前它位于
HKEY\U current\U user\Software\Microsoft\OneDrive
,ValueUserFolder
任何人都知道如何在Mac OS X?C上执行此操作。如果我理解正确,这意味着它是“自动”托管代码。我的完整方法:[code]公共静态字符串GetOneDriveLocation(){var userPath=Environment.GetEnvironmentVariable(“USERPROFILE”);var di=new DirectoryInfo(System.IO.Path.Combine(userPath,“OneDrive”);var location=di.FullName;if(di.Attributes.HasFlag(FileAttributes.ReparsePoint)){Guid FOLDERID\u SkyDrive=new Guid(“A52BBA46-E9E1-435f-B3D9-28DAA648C0F6”);位置=GetKnownFolderPath(FOLDERID_SkyDrive);}返回位置;}[/code]欢迎来到SO!你能提供更多关于你发布的代码的信息和解释吗?$ENV:OneDriveConsumer
和Steve Rochford的输入。%OneDrive%
如果你的电脑上只有一个或默认的OneDrive客户端。如果没有,%OneDriveConsumer%
用于个人OneDrive和%OneDriveCommercial%
对于OneDrive for Business。
using System;
using System.IO;
DirectoryInfo di = DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
string path = di.Parent.FullName;
$>set one
OneDrive=C:\Users\my_username\OneDrive - COMPANY
OneDriveCommercial=C:\Users\my_username\OneDrive - COMPANY
OneDriveConsumer=C:\Users\my_username\OneDrive
$>dir env: | Where-Object {$_.Name -like "one*"}
OneDrive=C:\Users\my_username\OneDrive - COMPANY
OneDriveCommercial=C:\Users\my_username\OneDrive - COMPANY
OneDriveConsumer=C:\Users\my_username\OneDrive
$>Get-ChildItem env: | Where-Object {$_.Name -like "one*"}
OneDrive=C:\Users\my_username\OneDrive - COMPANY
OneDriveCommercial=C:\Users\my_username\OneDrive - COMPANY
OneDriveConsumer=C:\Users\my_username\OneDrive