【发布时间】:2015-05-15 13:54:49
【问题描述】:
情况
我正在尝试以编程方式运行命令行工具 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 为目标,但启动一个进程,该进程将针对它所在的机器的正确平台。
【问题讨论】:
-
在不知道为什么不能针对任何 CPU 的情况下,这个建议可能听起来很愚蠢,但是您能否编写一个位于中间的小程序并通过针对任何 CPU 和您的主程序调用来生成 DISM.exe是吗?
-
@Crowcoder 这可能是一个选项,但我不确定这是否可行。
-
我刚刚发现了相反的问题(出于某种原因),其中一个答案指向一个工具,通过它的声音可以让您在 64 位操作系统上运行 32 位进程。这是问题:stackoverflow.com/questions/8489871/… 这是他们建议的工具techsupportalert.com/content/…
-
如果我的评论对您有帮助,请告诉我,我会回答。我不想把它作为答案,因为这是我第一次看到这个,所以我无法验证它是否会起作用,它只是听起来会。
-
@Keithin8a 由于我不明白的原因,DSIM.exe 对 32 位和 64 位进程非常敏感。因此,即使我在 System32(不是 SysWOW64)中运行正确的 DSIM.exe,它仍然会给我问题中的信息。除了问题中描述的我已经尝试过的内容之外,我不确定您的评论所暗示的内容。