5

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 サービスとして実行されているためだと思います。私が現在使用しているコードは、私が行ったいくつかのテストで機能します。このパスを取得するためのよりインテリジェントな (エラー防止) 方法が必要なようです。

別の考え...探しているものを提供するレジストリキーがあるのではないでしょうか? うーん

4

3 に答える 3

1

これは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"
于 2013-08-08T17:38:20.840 に答える