Вызов DISM через 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();
Я получаю вывод:
Вы не можете обслуживать работающую 64-битную операционную систему с 32-битной версией DISM. Пожалуйста, используйте версию DISM, которая соответствует архитектуре вашего компьютера.
Пробовал для имени файла: "C:\WINDOWS\SYSTEM32\dism.exe" и "C:\WINDOWS\SYSWOW64\dism.exe"
и все еще получаю тот же результат.
Машина работает на Windows 7 Embedded.
РЕДАКТИРОВАТЬ: пытался:
Но все еще не работает..
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();
Хотя уже ответил, я сталкивался с этой проблемой несколько раз. WinPE не имеет совместимости с различными архитектурами. Таким образом, 64-битный WinPE должен запускать программы, скомпилированные для его архитектуры. Что касается dism, то при установке WAIK или Windows Kits существует 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