情况
我正在尝试以编程方式运行命令行工具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平台。(例如,参见this question,尽管没有答案提到这一点)。然而,不幸的是,目前要求我们继续针对此平台进行开发,我无法通过切换到任何CPU来解决这个问题。
所以我的问题是如何以编程方式生成一个进程,使其独立于其父进程的平台-即保持我的项目针对x86,但启动一个将针对其所在机器的正确平台的进程。