背景
我的 Bamboo 服务器在 Linux 上运行。我使用 Bamboo 为 Python 应用程序构建可执行安装程序和源代码分发。
我无法从 Linux 为我的 Python 包构建 MSI 安装程序,因此我在另一台机器上的 Windows 7 64 位上运行 Bamboo Remote Agent 作为服务。该远程代理被配置为提供构建 Windows 二进制文件的能力,因此 Bamboo 在其上运行 MSI 和 EXE 构建。
.zip 源 dist 和 .exe 安装程序已成功构建。但是,我的构建脚本在尝试构建 .msi 安装程序时失败。
构建脚本
构建脚本是一个非常简单的批处理文件:
python setup.py bdist --formats=zip
IF %ERRORLEVEL% NEQ 0 EXIT /B 1
python setup.py bdist_wininst
IF %ERRORLEVEL% NEQ 0 EXIT /B 1
echo ***Building msi installer***
echo.
python setup.py bdist_msi
IF %ERRORLEVEL% NEQ 0 EXIT /B 1
错误
以下是我的构建日志的一部分(用于上下文):
28-Apr-2011 13:26:46 ***Building msi installer***
...
28-Apr-2011 13:26:46 creating build\bdist.win32\msi\Lib\site-packages
28-Apr-2011 13:26:46 creating build\bdist.win32\msi\Lib\site-packages\my_pkg
...
28-Apr-2011 13:26:46 running install_egg_info
28-Apr-2011 13:26:46 Writing build\bdist.win32\msi\Lib\site-packages\my_pkg-0.4.0b23-py2.7.egg-info
我从 Python 得到以下异常回溯:
Traceback (most recent call last):
File "setup.py", line 38, in <module>
'my_pkg': ['default_config.cfg']},
File "c:\python27\lib\distutils\core.py", line 152, in setup
dist.run_commands()
File "c:\python27\lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
File "c:\python27\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "c:\python27\lib\distutils\command\bdist_msi.py", line 243, in run
sversion, author)
File "c:\python27\lib\msilib\__init__.py", line 139, in init_database
db = OpenDatabase(name, MSIDBOPEN_CREATE)
_msi.MSIError: unknown error 65f
0x65f
转换为1631
,如果我的 Google Fu 强大的话,它可能是"Error 1631: The Windows Installer service failed to start"
。
进一步测试
如果我转到执行构建的机器上的 Bamboo 代理的构建目录,并从 Windows 资源管理器手动运行构建脚本批处理文件,则 .msi 构建成功。
请注意,我在以前的版本中使用了相同的 SVN 存储库修订版,但我不得不移动我的开发系统,并且可能无意中更改了 Windows 中的某些配置(或者可能是 Windows 更新破坏了它)。