我有一个安装程序,如果它退出,它会升级以前版本的应用程序。当安装为升级模式时,我想跳过某些操作。如何确定安装是在升级模式还是首次安装模式下运行?
我正在使用 Wise Installer,但我认为这并不重要。我假设 Windows Installer 具有在安装程序处于升级模式时设置的属性。我似乎无法找到它。如果该属性存在,我假设我可以在条件语句中使用它。
我有一个安装程序,如果它退出,它会升级以前版本的应用程序。当安装为升级模式时,我想跳过某些操作。如何确定安装是在升级模式还是首次安装模式下运行?
我正在使用 Wise Installer,但我认为这并不重要。我假设 Windows Installer 具有在安装程序处于升级模式时设置的属性。我似乎无法找到它。如果该属性存在,我假设我可以在条件语句中使用它。
您能否详细说明您使用哪种工具来创建此安装程序?
我使用 Windows Installer XML( WIX )。在 WIX 中,您可以执行以下操作:
<!-- Property definitions -->
<?define SkuName = "MyCoolApp"?>
<?define ProductName="My Cool Application"?>
<?define Manufacturer="Acme Inc."?>
<?define Copyright="Copyright © Acme Inc. All rights reserved."?>
<?define ProductVersion="1.1.0.0"?>
<?define RTMProductVersion="1.0.0.0" ?>
<?define UpgradeCode="{EF9D543D-9BDA-47F9-A6B4-D1845A2EBD49}"?>
<?define ProductCode="{27EA5747-9CE3-3F83-96C3-B2F5212CD1A6}"?>
<?define Language="1033"?>
<?define CodePage="1252"?>
<?define InstallerVersion="200"?>
并定义升级选项:
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Minimum="$(var.ProductVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Language="$(var.Language)"
Property="NEWPRODUCTFOUND" />
<UpgradeVersion Minimum="$(var.RTMProductVersion)"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IgnoreRemoveFailure="no"
IncludeMaximum="no"
Language="$(var.Language)"
Property="OLDIEFOUND" />
</Upgrade>
然后,您可以进一步使用OLDIEFOUND
和NEWPRODUCTFOUND
属性,具体取决于您想要做什么:
<!-- Define custom actions -->
<CustomAction Id="ActivateProduct"
Directory='MyCoolAppFolder'
ExeCommand='"[MyCoolAppFolder]activateme.exe"'
Return='asyncNoWait'
Execute='deferred'/>
<CustomAction Id="NoUpgrade4U"
Error="A newer version of MyCoolApp is already installed."/>
上述定义的动作必须在InstallExcecuteSequence
<InstallExecuteSequence>
<Custom Action="NoUpgrade4U"
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
<Custom Action="ActivateProduct"
OnExit='success'>NOT OLDIEFOUND</Custom>
</InstallExecuteSequence>
如果产品是在每台机器上安装或为当前用户安装,则有一个名为Installed的 MSI 属性。您可以在条件布尔语句中使用它。
您还可以检查这些其他 MSI 安装状态属性,以防其中一个效果更好。我从未使用过 Wise,但我认为有一种方法可以检索这些属性。
我不确定我是否理解你的问题。
如果您自己编写安装脚本,那么在 Windows 上,最好的方法是检查此类程序通常创建的注册表项。与安装目录(和开始菜单条目等)不同,它是一个不变量。这些键之一甚至可以是软件的版本号,以检查用户是否尝试安装旧版本(或了解是否必须删除某些文件等)。