繁体   English   中英

如何在系统帐户下获取所有用户应用程序数据文件夹?

[英]How to get all users application data folders under system account?

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)返回当前用户文件夹,但是在系统帐户下,它返回例如:

C:\Windows\system32\config\systemprofile\AppData\Roaming\

因此,问题是如何使用系统帐户获取所有用户的AppData文件夹?

我认为,这可以帮助您:

//List all the users
List<String> usersList = new List<String>();
ManagementObjectSearcher sidQuery = new ManagementObjectSearcher("SELECT * FROM Win32_Account");
ManagementObjectCollection results = sidQuery.Get();
foreach (ManagementObject result in results)
{
   usersList.Add(result["Name"])
}

//Showing all the partitions letters 
String[] strDrives = Environment.GetLogicalDrives();
Foreach (string strDrive in strDrives)
{
  //Check if profil has AppData folder
  List<String> usersAppData = new List<String>();
  String pathAppData = String.Empty;
  foreach(String user in usersList)
  {
     pathAppData = String.Format("{0}\Users\{1}\AppData", strDrive, user);
     if(Directory.Exists(pathAppData ))
     {
        usersAppData.Add(pathAppData);
     }
  }
}

    //Here, you've got all the users AppData folder in usersAppData

当我想获取“ SYSTEM”帐户下用户专用文件夹(Desktop或MyDocuments)的路径时,我遇到了同样的问题。 经过长时间的调查,我找到了解决方案:

string sid = string.Empty; 
using (var mos = new ManagementObjectSearcher(
                        "Select SID From Win32_UserAccount where Disabled = 0"))
{
    foreach (var bios in mos.Get())
    {
        sid = bios["SID"].ToString();
    }
}
using (RegistryKey key = Registry.Users.OpenSubKey(sid +
@"\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"))
{
    var docFolder = key.GetValue("Personal");
    var desktopFolder = key.GetValue("Desktop");
    Console.WriteLine("document folder: {0}", docFolder);
    Console.WriteLine("Desktop folder: {0}", desktopFolder);
}

“禁用= 0”是获得活动用户的选项。 如果使用“ regedit”打开注册表,则将找到所需的全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM