5

私は次のように外部プロセスを呼び出すアプリに取り組んでいます:

ProcessStartInfo startInfo = new ProcessStartInfo(PathToExecutable, Arguments){
     ErrorDialog = false,
     RedirectStandardError = true,
     RedirectStandardOutput = true,
     UseShellExecute = false,
     CreateNoWindow = true,
     WorkingDirectory = WorkingDirectory
 };

using (Process process = new Process()) {
    process.StartInfo = startInfo;

    process.Start();
    process.BeginErrorReadLine();
    process.BeginOutputReadLine();
    process.WaitForExit();

    return process.ExitCode;
}

私が呼び出しているプロセスの 1 つは、ユーザーが設定する必要のない環境変数に依存しています。外部プロセスに送信される環境変数を変更する方法はありますか? 理想的には、実行中のプロセスにのみ表示できるようにすることができますが、プログラムでシステム全体に設定する必要がある場合は、それで解決します (ただし、UAC は管理者として実行することを強制しますか? )

ProcessStartInfo.EnvironmentVariables は読み取り専用なので、多くの助けになります...

4

2 に答える 2

5

ただし、それに値を追加することはできます。

MSDN ProcessStartInfo.EnvironmentVariables プロパティから:

EnvironmentVariables プロパティを設定することはできませんが、プロパティによって返される StringDictionary を変更できます。たとえば、次のコードは TempPath 環境変数を追加します myProcess.StartInfo.EnvironmentVariables.Add("TempPath", "C:\\Temp")。EnvironmentVariables プロパティを変更した後にプロセスを開始するには、 UseShellExecuteプロパティをfalseに設定する必要があります。UseShellExecutetrueの場合 、Start メソッドが呼び出されると InvalidOperationException がスローされます。

于 2012-11-06T16:59:10.573 に答える
1

インデクサーを使用して環境変数を設定できます。

process.StartInfo.EnvironmentVariables['name'] = value;
于 2012-11-06T16:59:54.147 に答える