【问题标题】:Run a Wix Tool in c#在 C# 中运行 Wix 工具
【发布时间】:2017-11-09 09:03:43
【问题描述】:

考虑命令行:

"c:\Program Files (x86)\WiX Toolset v3.9\bin\dark.exe" -out "d:\Test\Product.wxs" "d:\Test\Setup.msi" -ext " c:\Program Files (x86)\WiX Toolset v3.9\bin\WixUIExtension.dll" -x "d:\Test\Bin"

它成功地“反编译”了安装程序中的“Product.wxs”文件。我必须编写一个 C# 函数,使用安装程序文件对命令行进行参数化。我写了以下代码:

 string Path = "C:\\Program Files (x86)\\WiX Toolset v3.9\\bin\\dark.exe";
 string Args = "D:\\Test\\Setup.msi -out D:\\Test\\Product.wxs -x D:\\Test\\Bin -ext C:\\Program Files (x86)\\WiX Toolset v3.9\\bin\\WixUIExtension.dll";
 Process pi = Process.Start(Path, Args);

Process.Start 函数返回一个进程,其 MainModule 抛出 Win32 异常,并带有消息:

ReadProcessMemory 或 WriteProcessMemory 请求仅完成了一部分

错误在哪里,我该如何解决?

解决了!
如果 Args == "\"D:\\Test\\Setup.msi\" -out \"D:\\Test\\Product.wxs\" -x \"D:\\Test\\Bin\" -ext \"C:\\Program Files (x86)\\WiX Toolset v3.9\\bin\\WixUIExtension.dll\"" 程序有效

【问题讨论】:

  • 什么操作系统?看来您正在尝试混合 32/64 位进程,请参阅 this
  • Windows 7 专业版
  • 尝试更改您开始进程的项目的 CPU。 Set explicitly 32 位 (x86) 或 64 位并告诉结果。
  • @Sinatr,如果我将 Project 的 CPU 更改为 32 位,Process.Start 函数会调用 Win32 异常 并显示消息 A 32 bit processes cannot access modules of 64 位进程。另一方面,如果我将保护的 CPU 更改为 64 位,Process.Start 会调用第一个异常!
  • 注释掉Process pi = Process.Start(Path, Args);这行会发生什么?换句话说,我怀疑您没有显示相关代码。

标签: c# wix


【解决方案1】:

你的命令行不一样。将相同的命令行放入您成功执行的Process.Start。 C# 应用程序中的命令行缺少所有引号。添加它们,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多