C# 从windows服务获取用户根目录

C# 从windows服务获取用户根目录,c#,.net,windows,C#,.net,Windows,我有一个用C#编写的Windows服务。我需要向每个用户目录添加一个文件。如何找到开始的路径?我意识到这真的很愚蠢,但这就是我目前正在做的: if (Directory.Exists("C:\\Users")) { path = "C:\\Users"; } else if (Directory.Exists("C:\\Documents and Settings")) { path = "C:\\Documents and Settings"; } 我

我有一个用C#编写的Windows服务。我需要向每个用户目录添加一个文件。如何找到开始的路径?我意识到这真的很愚蠢,但这就是我目前正在做的:

  if (Directory.Exists("C:\\Users"))
  {
    path = "C:\\Users";
  }
  else if (Directory.Exists("C:\\Documents and Settings"))
  {
    path = "C:\\Documents and Settings";
  }
我已经查看了特殊文件夹:

他们似乎都没有归还我需要的东西。例如,ApplicationData正在返回System32目录的路径。我想这是因为它是作为windows服务运行的。我目前使用的代码适用于我所做的几个测试。似乎应该有一种更智能(防错)的方法来获得这条路径


另一个想法…也许有一个注册表项,将给我什么,我在寻找?嗯

我在Win7注册表下找到了这个。XP看起来具有相同的注册表项,但值中包含“所有用户”配置文件

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Common Desktop"="C:\\Users\\Public\\Desktop"
"Common Start Menu"="C:\\ProgramData\\Microsoft\\Windows\\Start Menu"
"CommonVideo"="C:\\Users\\Public\\Videos"
"CommonPictures"="C:\\Users\\Public\\Pictures"
"Common Programs"="C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs"
"CommonMusic"="C:\\Users\\Public\\Music"
"Common Administrative Tools"="C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools"
"Common Startup"="C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"
"Common Documents"="C:\\Users\\Public\\Documents"
"OEM Links"="C:\\ProgramData\\OEM Links"
"Common Templates"="C:\\ProgramData\\Microsoft\\Windows\\Templates"
"Common AppData"="C:\\ProgramData"

我可能还没有完全理解你,但我认为你只需要找到你跑步的地方,然后找到它的根

Path.GetPathRoot(Assembly.GetEntryAssembly().Location);
更新


这就是你需要研究的。因为你的问题不够详细,所以没有一个简单的解决办法。如果服务以特定用户或系统的身份运行,则会产生影响。另外,您没有指定如何使用它,因此这很重要。它是保存配置文件的地方还是写入文件的临时位置,还是其他人想要访问该文件夹的地方?所有这些都很重要,如果您添加一些额外的详细信息,那么我将更新我的答案。

关于
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
和key
ProfilesDirectory
如何?它指向我电脑上的
%SystemDrive%\Users
。只是不确定哪个版本的Windows有这个键(7和10都有)。

我想知道用户也存在于其他目录中的可能性有多大。是的,我知道这是可能的……这就是为什么我在寻找更好的解决方案。不;我的意思是用户存在于多个目录中。你不应该像上面那样使用硬编码路径,因为它们在操作系统版本上是不一致的。虽然较新版本的Windows通过对旧文件夹名称进行软/硬链接来支持向后兼容性,但不能保证它始终是相同的case@Tseng:这正是他问这个问题的原因。服务不会在用户上下文中运行,那么这个环境变量是如何存在的呢?服务是在系统下运行的吗?我相信他试图访问所有用户的配置文件,但由于他是在系统帐户下运行的,所以他不知道如何检索它。