
Windows 7 サービスとして実行されているプログラムがあります。プログラムでは、HOMEPATH 環境変数を使用してファイルの場所を設定しています。通常、プログラムをコマンド ラインで実行すると、HOMEPATH はログインしているユーザーのホーム ディレクトリにマップされます。ただし、Windows サービスの場合はそうではありません。
では、プログラムをサービスとして実行し、HOMEPATH 環境変数を使用する場合、それはどこにマップされるのでしょうか?
答え1
サービスは通常、3つのサービスアカウントのいずれかで実行されますLocal Service
Local System
。Network Service
これらのサービスアカウントのすべてにHOMEPATH変数が設定されます。ヌル。
調べる
特定のシナリオでは、サービスにイベント ログ エントリを書き込み、HOMEPATH 変数に格納されている内容を出力させることができます。C# では、次のように使用できます。
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("The HomePath for this service is '" + Environment.GetEnvironmentVariable("HOMEPATH") + "'", EventLogEntryType.Information);
}
可能な解決策
サービスが使用するアカウント (たとえば、ユーザー アカウント) は、サービス プロパティ ウィンドウまたはサービス インストール構成で設定できます。自分のユーザー アカウントでテストしたところ、イベント ログ エントリが表示されました
The HomePath for this service is '\Users\Admin-PC'
。