【问题标题】:DISM call via C#通过 C# 调用 DISM
【发布时间】:2017-12-13 10:22:18
【问题描述】:
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 上运行。

编辑: 试过了:

Calling dism.exe from System.Diagnostics.Process Fails

但还是不行..

【问题讨论】:

  • 可以从命令行执行命令吗?另外,您说您在不同的文件夹中尝试了两种不同版本的dism.exe。但是,您提供的代码未指定文件夹。您的问题似乎与编程无关,而是执行与您的操作系统匹配的正确命令的问题。
  • 当我从命令行执行时它运行良好。找到了可以试一试的东西。如果效果不好,贴出来:)
  • @Nenad,也许您的 Wpf 应用程序是 64 位编译的,并且无法调用 32 位版本的 dism.exe,但我不知道。
  • File System Redirection 可以在这里应用。

标签: c# wpf dism


【解决方案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();

【讨论】:

    【解决方案2】:

    虽然已经回答了我多次遇到这个问题。 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多