我为什么可以手动构建Python MSI安装程序,但Bamboo远程代理服务失败?

2 投票
1 回答
1595 浏览
提问于 2025-04-16 16:37

背景

我的Bamboo服务器运行在Linux上。我用Bamboo来构建Python应用的可执行安装程序和源代码分发包。

因为我无法在Linux上为我的Python包构建MSI安装程序,所以我在另一台运行Windows 7 64位的机器上作为服务运行了一个Bamboo远程代理。这个远程代理被配置为能够构建Windows二进制文件,因此Bamboo会在上面运行MSI和EXE的构建。

源代码的.zip文件和.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,如果我的谷歌搜索能力没问题的话,可能"错误 1631: Windows Installer服务未能启动"

进一步测试

如果我去执行构建的机器上的Bamboo代理的构建目录,并从Windows资源管理器手动运行构建脚本的批处理文件,.msi的构建就成功了。

值得注意的是,我之前在相同的SVN版本中让这一切都正常工作过,但由于我不得不移动我的开发系统,可能不小心更改了Windows中的某些配置(或者可能是Windows更新导致的问题)。

1 个回答

3

如果Bamboo代理是一个Windows服务,你可能需要以更高的权限来运行它。关于服务账户如何访问MSI服务,有一些奇怪的规则。(我从来没有搞清楚具体需要哪些权限。)

撰写回答