状況
コマンドライン ツール DISM.exe をプログラムで実行しようとしています。手動で実行すると動作しますが、次のように生成しようとすると:
var systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
var dism = new Process();
dism.StartInfo.FileName = Path.Combine(systemPath, "Dism.exe");
dism.StartInfo.Arguments = "/Online /Get-Features /Format:Table";
dism.StartInfo.Verb = "runas";
dism.StartInfo.UseShellExecute = false;
dism.StartInfo.RedirectStandardOutput = true;
dism.Start();
var result = dism.StandardOutput.ReadToEnd();
dism.WaitForExit();
次に、私は次のようにresult
出てきます:
エラー: 11
32 ビット バージョンの DISM を使用して、実行中の 64 ビット オペレーティング システムにサービスを提供することはできません。お使いのコンピューターのアーキテクチャに対応するバージョンの DISM を使用してください。
問題
私は実際にこれを引き起こす原因をすでに認識しています。私のプロジェクトは x86 プラットフォーム用にコンパイルするように設定されています。(たとえば、この質問を参照してください。ただし、これについて言及している回答はありません)。ただし、残念ながら、現時点ではこのプラットフォームをターゲットにし続ける必要があるため、任意の CPU に切り替えることでこれを修正することはできません。
したがって、私の質問は、親のプラットフォームに依存しない方法でプロセスをプログラムで生成する方法です。つまり、プロジェクトを x86 を対象にしたままにし、マシンの正しいプラットフォームを対象とするプロセスを開始します。