通过 C# 调用 DISM
DISM call via C#
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();
我得到输出:
You cannot service a running 64-bit operating system with a 32-bit version of DISM.
Please use the version of DISM that corresponds to your computer's architecture.
尝试了文件名:
"C:\WINDOWS\SYSTEM32\dism.exe"
和
"C:\WINDOWS\SYSWOW64\dism.exe"
仍然得到相同的结果。
机器 运行 Windows 7 Embedded。
编辑:
尝试过:
Calling dism.exe from System.Diagnostics.Process Fails
但还是不行..
已找到解决方案!
制作所有 projects/setups 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();
尽管我已经回答了这个问题运行 多次。 WinPE 不兼容不同的体系结构。因此 64 位 WinPE 必须 运行 程序针对其体系结构编译。至于 dism,在安装 WAIK 或 Windows 套件时有 64 位和 32 位版本。
64 位光盘
C:\程序Files\WindowsAIK\Tools\amd64\Servicing\dism.exe
32位光盘
C:\Program Files\Windows AIK\Tools\x86\Servicing\dism.exe
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();
我得到输出:
You cannot service a running 64-bit operating system with a 32-bit version of DISM. Please use the version of DISM that corresponds to your computer's architecture.
尝试了文件名: "C:\WINDOWS\SYSTEM32\dism.exe" 和 "C:\WINDOWS\SYSWOW64\dism.exe"
仍然得到相同的结果。
机器 运行 Windows 7 Embedded。
编辑: 尝试过:
Calling dism.exe from System.Diagnostics.Process Fails
但还是不行..
已找到解决方案! 制作所有 projects/setups 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();
尽管我已经回答了这个问题运行 多次。 WinPE 不兼容不同的体系结构。因此 64 位 WinPE 必须 运行 程序针对其体系结构编译。至于 dism,在安装 WAIK 或 Windows 套件时有 64 位和 32 位版本。 64 位光盘 C:\程序Files\WindowsAIK\Tools\amd64\Servicing\dism.exe 32位光盘 C:\Program Files\Windows AIK\Tools\x86\Servicing\dism.exe