从windows服务获取用户根目录

本文关键字:用户 根目录 获取 服务 windows | 更新日期: 2023-09-27 18:26:59

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

  if (Directory.Exists("C:''Users"))
  {
    path = "C:''Users";
  }
  else if (Directory.Exists("C:''Documents and Settings"))
  {
    path = "C:''Documents and Settings";
  }

我查看了特殊文件夹:http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

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

另一个想法。。。也许有一个注册表项可以告诉我要找什么?嗯

从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_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows NT'CurrentVersion'ProfileList和密钥ProfilesDirectory怎么样?它指向我电脑上的%SystemDrive%'Users。只是不确定哪个版本的Windows有这个密钥(7和10有)。