我有一个C# WPF应用程序,现在想要找到一个在Windows中获取OneDrive根目录路径的方法。我该如何通过编程实现这个功能?我已经在网上搜索过,但是没有找到任何相关信息。我希望能够提供一些代码,但是我并不知道如何做到这一点;我的意思是,我已经检查了系统环境变量,并未发现有什么有效的解决方案,因此没有得到任何结果。
在最新的Windows 10更新中,微软引入了一个新的环境变量%OneDrive%。我已经在2017年4月的更新(创作者更新)上进行了检查,它已经存在。
这对我有效(Windows 10专业版,1803):
var oneDrivePath = Environment.GetEnvironmentVariable("OneDriveConsumer");
Guid FOLDERID_SkyDrive = new Guid("A52BBA46-E9E1-435f-B3D9-28DAA648C0F6");
location = GetKnownFolderPath(FOLDERID_SkyDrive);
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\SkyDrive\UserFolder
我会尝试使用Registry.GetValue()
方法: const string userRoot = "HKEY_CURRENT_USER";
const string subkey = @"Software\Microsoft\Windows\CurrentVersion\SkyDrive";
const string keyName = userRoot + "\\" + subkey;
string oneDrivePath = (string)Registry.GetValue(keyName,
"UserFolder",
"Return this default if NoSuchName does not exist.");
Console.WriteLine("\r\n OneDrivePath : {0}", oneDrivePath);
HKEY_CURRENT_USER\Software\Microsoft\OneDrive
,其值为 UserFolder
。 - Alex ZhukovskiyOneDrive
OneDriveConsumer
OneDriveCommercial
在我的情况下,第一个和最后一个是相同的(我的商业版OneDrive帐户),中间一个是我的个人版OneDrive。我在加入域的计算机和没有加入域的计算机上看到了相同的结果,但两者都配置了OneDrive。在只有我的个人版OneDrive的未加入域的PC上,OneDrive
环境变量指向个人版OneDrive。OneDrive
变量,只使用OneDriveConsumer
/OneDriveCommercial
来查找OneDrive文件夹。$ENV:onedrive
$ENV:OneDriveConsumer
翻译成中文。 - Rocky Scott private void button1_Click(object sender, EventArgs e)
{
try
{
const string userRoot = "HKEY_CURRENT_USER";
const string subkey = @"Software\Microsoft\OneDrive";
const string keyName = userRoot + "\\" + subkey;
string oneDrivePath = (string)Microsoft.Win32.Registry.GetValue(keyName,
"UserFolder",
"Return this default if NoSuchName does not exist.");
Console.WriteLine("\r\n OneDrivePath : {0}", oneDrivePath);
string Onedrivepath= string.Format(oneDrivePath);
label1 .Text = string.Format(Onedrivepath);
}
catch (Exception)
{
/// throw;
}
}
为了跟踪这些OneDrive环境变量(它将显示以“one”开头的所有环境变量):
从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
或者
$>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
在VBA中使用Environ("OneDriveConsumer")
我认为注册表是Smashing1978提到的,但是在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\SkyDrive下我没有UserFolder键。
你能使用%UserProfile%\SkyDrive路径吗?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\SkyDrive\UserSyncRoots\
是什么情况? - Alexandru
%OneDrive%
。如果不是,则可使用%OneDriveConsumer%
表示个人版OneDrive,%OneDriveCommercial%
表示商业版OneDrive。请注意,不要改变原文意思。 - Jeankowkow