背景: 特定の条件が満たされたときにアプリケーションの実行をトリガーするサービスを作成しました。このサービスは、RDP 経由でシステムにログオンするために使用される同じ Windows ユーザー アカウントで実行するように設定されています。このサービスを介してトリガーされる .NET アプリケーションも作成しました。このアプリケーションは、ディスク上の構成ファイル (アプリケーションの ProgramData フォルダーにあります) を探し、構成ファイルにある設定を使用して、このアプリケーションの出力に影響を与えます。
問題: ユーザーがインタラクティブにアプリケーションを実行すると、アプリケーションは問題なく動作します。ただし、サービスがアプリケーションの実行をトリガーすると、アプリケーションが構成ファイルから正しい値をロードしていないように見えます。これは、サービスから実行されたアプリケーションが独自の構成ファイルを持ち、ProgramData にあるものを使用していないかのようです。
なぜこれが起こっているのかについての洞察を探しています。Windows 7 および Windows 2008 R2 で、スケジュールされたタスクを介して、またはサービスとしてアプリケーションを実行しているときに、奇妙な動作が見られます。対話型アプリケーションとサービス アプリケーションが、同じユーザーとして実行されている同じシステム上に異なる環境を持っているようなものです...
注:サービスの実行可能ファイルも、トリガーされたアプリケーションと同じフォルダーにあります。デフォルトでは、作業ディレクトリはサービスを実行しているディレクトリになると思います。
public int ExecRun()
{
Process proc = new Process();
proc.StartInfo = new ProcessStartInfo
{
FileName = "C:\\Program Files\\TEST\\runme.exe",
Arguments = "/DS:TEMP"
};
proc.Start();
proc.WaitForExit();
return proc.ExitCode;
}