1

我正在使用 python 脚本在 wix 项目中执行自定义操作。

二进制 Id="python_script" SourceFile="myscript.py"

自定义操作为:

CustomAction Id="CA_python_script" BinaryKey="python_script" Execute="immediate" Impersonate="yes" Return="check" ExeCommand=""[COMMANDPROMPT]" /c "C:\Python26\python.exe myscript.py""

我也尝试过:

CustomAction Id="CA_python_script" BinaryKey="python_script" Execute="immediate" Impersonate="yes" Return="check" ExeCommand=""[COMMANDPROMPT]" /c "C:\Python26\python.exe python_script""

失败并出现错误:

MSI (s) (40:14) [15:18:47:204]: 注意: 1: 1721 2: CA_python_script 3: C:\Windows\Installer\MSI33F9.tmp 4: "C:\Windows\system32\cmd .exe" /c "C:\Python26\python.exe myscript.py" 错误 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。操作:CA_python_script,位置:C:\Windows\Installer\MSI33F9.tmp,命令:"C:\Windows\system32\cmd.exe" /c "C:\Python26\python.exe myscript.py" MSI (s) (40:14) [15:18:51:782]:产品:我的软件 -- 错误 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。行动:backup_Registry_Cmd,位置:C:

操作于 15:18:51 结束:backup_Registry_Cmd。返回值 3。

这有什么问题?

4

3 回答 3

1

我知道我在线程中是一个相当晚的人,但我遇到了它并想我会为其他任何人回答。

根本问题是你不能依赖用户:

  1. 安装了 Python
  2. 安装了正确的 Python 版本
  3. python的位置(如果已安装)
  4. 安装了正确的包/库

您也只能从 python 运行可执行文件。您可以做的最简单的事情是将您的 python 脚本编译EXE。

使用py2exepyInstaller或 best cx_Freeze等工具,您可以将 python 脚本“编译”成 .EXE 文件,您可以在 WiX 项目中包含并运行该文件。

这样做的好处是,这些工具将确保您的 python 脚本针对正确的 python 二进制文件执行,并将带来您需要的所有依赖项并将它们嵌入到 .EXE 文件中。

警告语:这些解决方案不是铁板钉钉的,它们非常通用,但您可能会遇到问题,因此这可能不适用于您的目的。

于 2013-05-14T23:38:17.967 回答
0

二进制表中的自定义操作可以是 DLL 或 EXE。不支持提取文件并将其传递给另一个 .exe。

于 2012-07-27T14:52:20.663 回答
0

出现此类问题的一个原因是您的命令中有一个空格。WiX 对空间不太友好。

不要无耻地宣传我写的关于在使用 WiX 时处理脚本语言的确切主题的文章,但这里是:http ://www.optimalbpm.se/wiki/index.php/Wix_and_scripting_languages

关于其他答案中提到的其他问题,满足此处提到的其他要求;我还写了一篇关于如何将 exe 安装程序从 pythonlibs 转换为 .msi 的指南:http ://www.optimalbpm.se/wiki/index.php/Python_packages_from_exe_to_WiX_to_msi

这样做的原因是安装其他可卸载的 python 包(有些需要 Visual Studio 在 pip 中编译)。例如,如果没有二进制安装,lxml 将无法工作。

于 2015-01-15T10:47:53.377 回答