托马斯K的答案接近,但在我的情况下并不完全准确。经过一些尝试和错误,我发现GUID需要用花括号括起来:
bdist_msi_options = {
"upgrade_code": "{96a85bac-52af-4019-9e94-3afcc9e1ad0c}"
}
这些选项需要与“build_exe”选项一起传递(一些在线示例使用其他名称来表示这些参数,但我发现只有bdist_msi有效):
setup( # name, version, description, etc...
options={"build_exe": build_exe_options, # defined elsewhere
"bdist_msi": bdist_msi_options},
executables=[Executable("run.py",
base="win32GUI",
shortcutName="My Program name",
shortcutDir='ProgramMenuFolder')])
使用这段代码,在我的情况下,以前的安装程序被正确卸载并从“添加/删除程序”列表中删除。
C:\Windows\assembly
,并按下Public Key Token
列标题 以排序。然后查找您的 MSI 公共令牌号码(即未被删除的 MSI 安装程序的号码)并删除这些令牌条目。在糟糕的卸载之后执行此操作将允许正确的重新安装/升级,减少混乱的注册表和卸载程序信息。干杯!*P.S. 这是如何修复 ATi Catalyst 驱动程序和 CCC 面板更新出现问题的方法。 - arttronicssetup.py
http://codepaste.net/fkzojh ,您能否解释更多,如何更改产品或包ID以安装在旧包上而不是新包上? - alireza...
只是一个占位符。你应该生成一个随机的 GUID 放在那里。即使这样,它只会替换之前的版本,如果它具有相同的 GUID,所以你不能用它来删除已经存在的版本,而在此之前你想到了这个方法。 - Thomas K