【发布时间】: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);这行会发生什么?换句话说,我怀疑您没有显示相关代码。