Вызов 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.

РЕДАКТИРОВАТЬ: пытался:

Вызов dism.exe из System.Diagnostics.Process не работает

Но все еще не работает..

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

Другие вопросы по тегам