回答:
プロセスを開始する前に、ProcessStartInfo.WorkingDirectoryプロパティを使用して設定します。プロパティが設定されていない場合、デフォルトの作業ディレクトリは%SYSTEMROOT%\ system32です。
%SYSTEMROOT%の値は、以下を使用して決定できます。
string _systemRoot = Environment.GetEnvironmentVariable("SYSTEMROOT");
以下は、%ProgramFiles%の作業ディレクトリでNotepad.exeを開くサンプルコードです。
...
using System.Diagnostics;
...
ProcessStartInfo _processStartInfo = new ProcessStartInfo();
_processStartInfo.WorkingDirectory = @"%ProgramFiles%";
_processStartInfo.FileName = @"Notepad.exe";
_processStartInfo.Arguments = "test.txt";
_processStartInfo.CreateNoWindow = true;
Process myProcess = Process.Start(_processStartInfo);
また、Environment.CurrentDirectoryプロパティを介して直接アクセスできる、プロセスの現在の作業ディレクトリを制御するEnvironment変数もあります。
これを実装しようとしている私の頭を打った後のちょうどメモ。"UseShellExecute"をfalseに設定している場合、WorkingDirectory値の設定は機能しません。
Process.Startメソッドには、ProcessStartInfoのインスタンスを取得するオーバーロードがあります。このクラスには、「WorkingDirectory」というプロパティがあります。
そのプロパティを使用したいフォルダーに設定すると、正しいフォルダーで起動します。
WorkingDirectory相対パスにすることはできますが、そうである場合、現在のファイルまたは現在の実行可能ファイルのディレクトリに対する相対パスは何ですか?プログラムが起動しようとしている実行可能ファイルを見つけるのに問題があります。作業ディレクトリをexeのディレクトリ(現在のファイルと現在のexeに対して)に設定しましたが、見つかりません。