通过C#拨打DISM

时间:2017-12-13 10:22:18

标签: c# wpf dism

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版本。

尝试使用FileName: “C:\ WINDOWS \ SYSTEM32 \ dism.exe” 和 “C:\ Windows \ SYSWOW64 \ dism.exe”

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

计算机正在Windows 7 Embedded上运行。

编辑: 试过了:

  

Calling dism.exe from System.Diagnostics.Process Fails

但仍然没有工作..

2 个答案:

答案 0 :(得分:1)

找到解决方案! 使所有项目/设置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();

答案 1 :(得分:0)

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