3
Process p = new Process();
p.StartInfo.FileName = "dism";
p.StartInfo.Arguments = "/online /get-packageinfo /packagename:WinEmb-File-Based-Write-Filter~31bf3856ad364e35~amd64~~6.1.7601.17514";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();

string output = p.StandardOutput.ReadToEnd();

p.WaitForExit();
p.Close();

我得到输出:

您无法使用 32 位版本的 DISM 为正在运行的 64 位操作系统提供服务。请使用与您的计算机体系结构相对应的 DISM 版本。

尝试文件名:“C:\WINDOWS\SYSTEM32\dism.exe”和“C:\WINDOWS\SYSWOW64\dism.exe”

并且仍然得到相同的结果。

机器在 Windows 7 Embedded 上运行。

编辑:尝试过:

从 System.Diagnostics.Process 调用 dism.exe 失败

但是还是不行。。

4

2 回答 2

2

找到解决方案!使所有项目/设置 64 位构建。

并通过以下代码其工作:

ProcessStartInfo psi = new ProcessStartInfo("cmd");
psi.UseShellExecute = false;
psi.ErrorDialog = false;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;

Process plinkProcess = new Process();
plinkProcess.StartInfo = psi;
plinkProcess.Start();

StreamWriter inputWriter = plinkProcess.StandardInput;
StreamReader outputReader = plinkProcess.StandardOutput;
inputWriter.WriteLine("dism /online /get-packageinfo /packagename:WinEmb-File-Based-Write-Filter~31bf3856ad364e35~amd64~~6.1.7601.17514");
inputWriter.WriteLine("exit");
inputWriter.Flush();

plinkProcess.WaitForExit();

string strOutput = outputReader.ReadToEnd();

plinkProcess.Close();
于 2017-12-13T12:15:05.497 回答
0

虽然已经回答了我多次遇到这个问题。WinPE 不兼容不同的体系结构。因此 64 位 WinPE 必须运行为其架构编译的程序。至于 dism,安装 WAIK 或 Windows Kits 时有 64 位和 32 位版本。64 位磁盘 C:\Program Files\Windows AIK\Tools\amd64\Servicing\dism.exe 32 位磁盘 C:\Program Files\Windows AIK\Tools\x86\Servicing\dism.exe

于 2018-10-05T15:03:47.890 回答