我试图以编程方式运行命令行工具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();
Run Code Online (Sandbox Code Playgroud)
然后我的result出现:
错误:11
您无法使用32位版本的DISM为正在运行的64位操作系统提供服务.请使用与您的计算机体系结构相对应的DISM版本.
我实际上已经意识到导致这种情况的原因了:我的项目设置为编译x86平台.(例如,请参阅此问题,尽管没有一个答案提到这一点).但是,不幸的是,目前我们仍然需要继续瞄准这个平台,我无法通过切换到任何CPU来解决这个问题.
所以我的问题是如何以独立于其父平台的方式以编程方式生成流程 - 即保持我的项目以x86为目标,但启动一个流程,该流程将针对其所在机器的正确平台.
即使我在 System32 中运行正确的 DSIM.exe
但你不是。这才是重点。文件系统重定向器针对 32 位进程,因此当您System32向x86进程请求时,您实际上是从SysWow64. 如果您想访问 64 位 exe,您需要通过以下方式请求%windir%\sysnative
(%windir%存在SpecialFolder.Windows)
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |