问题描述
我使用 Inno Setup 创建了 exe安装程序,并使用 MSIWrapper 将其打包在 MSI 中。 / p>
为此,我在iss(InnoSetup)文件中插入了以下几行:
[...]
#define MyAppName "New_product_name"
AppName={#MyAppName}
AppId={#MyAppName}
[...]
以及MSIWrapper XML配置文件中的以下几行:
[...]
<ProductName Detect="" Value="Value" />
[...]
如果我将iss MyAppName更改如下:
[...]
#define MyAppName "New_product_name"
AppName={#MyAppName}
AppId={#MyAppName}
[...]
或配置XML如下:
[...]
<ProductName Detect="" Value="New_product_name" />
[...]
或两者兼有,我执行更新两个不同的程序,分别显示为 Old_product_name 和 New_product_name 控制面板。
如何实现目标?
非常感谢
丹妮尔
解决方法
首选MSI工具 :MSI很复杂。我认为您应该使用a proper MSI tool或完全依靠旧版安装程序技术。这些包装器似乎不可靠。我们能问一下这个软件是什么以及如何使用吗? (影响有意义的操作)。
以下不是MSIWrapper的答案,而是MSI中的速成课程,以便了解您所看到的内容,并可能在需要时选择一个更好的工具来创建MSI(您可以对所拥有的内容进行确定)。
ARP条目 :对于MSI程序包,“添加/删除”小程序中的两个条目通常表示同一MSI的两个版本已安装两次-而不用作升级(这将删除较旧的版本)。
MSI主要升级 :MSI主要升级是先卸载现有的MSI版本,然后再安装新的MSI版本,并使用各种计划选项来控制此顺序控制它的机制通常在MSI文件中的Upgrade table中找到。 如果您希望MSI升级能够正常工作,则必须编写该表。正确完成后,旧版本将作为新MSI软件包安装的一部分消失。我不熟悉如何使用MSIWrapper完成此操作,但是下面是一些示例来说明升级表的工作原理。
一些花絮:
- MSI文件不是zip文件,而是COM结构的存储文件-本质上是精简了SQL Server数据库(more info)。您可以使用Orca and a few other tools查看它们。
- 有许多情况可能导致重大升级失败,here are a few causes of failed major upgrade –这将导致添加/删除程序中有两个条目(如您所述)。
如何使用各种工具进行重大升级:
WiX :
- https://wixtoolset.org/documentation/manual/v3/howtos/updates/major_upgrade.html
- https://support.firegiant.com/hc/en-us/articles/230912187-Implement-major-upgrade-
Installshield :
- Creating MSI Update Packages(推荐)
- https://docs.revenera.com/installshield26helplib/helplibrary/MajorMinorSmall.htm
- During uninstalling upgraded product is refering the old build msi file for uninstallation
高级安装程序 :
链接 :
, AppId
directive值是程序列表中条目的键。
如果要更改应用程序的名称,请更改AppName
,但保留旧的AppId
。
这与Automatically create new entry in "Programs and Features" for each new version相反。