Installation 如何确定Windows Installer正在执行升级而不是第一次安装?

Installation 如何确定Windows Installer正在执行升级而不是第一次安装?,installation,windows-installer,Installation,Windows Installer,我安装了一个升级应用程序早期版本(如果退出)的程序。当安装处于升级模式时,我想跳过某些操作。如何确定安装是在升级模式下运行还是在首次安装模式下运行 我使用的是Wise安装程序,但我认为这并不重要。我假设Windows Installer具有在安装程序处于升级模式时设置的属性。我就是找不到。如果该属性存在,我假设可以在条件语句中使用它。我不确定是否理解您的问题。 如果您自己编写安装脚本,最好的方法是在Windows上检查该程序通常创建的注册表项。与安装目录(和开始菜单项等)不同,它是一个不变量。其

我安装了一个升级应用程序早期版本(如果退出)的程序。当安装处于升级模式时,我想跳过某些操作。如何确定安装是在升级模式下运行还是在首次安装模式下运行


我使用的是Wise安装程序,但我认为这并不重要。我假设Windows Installer具有在安装程序处于升级模式时设置的属性。我就是找不到。如果该属性存在,我假设可以在条件语句中使用它。

我不确定是否理解您的问题。

如果您自己编写安装脚本,最好的方法是在Windows上检查该程序通常创建的注册表项。与安装目录(和开始菜单项等)不同,它是一个不变量。其中一个键甚至可以是软件的版本号,以检查用户是否尝试安装旧版本(或了解是否必须删除某些文件等)。

您能否详细说明创建此安装程序所使用的工具类型

我使用Windows Installer XML()。在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"?>
必须在
InstallExcecuteSequence

<InstallExecuteSequence>
    <Custom Action="NoUpgrade4U" 
        After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
    <Custom Action="ActivateProduct" 
        OnExit='success'>NOT OLDIEFOUND</Custom>
</InstallExecuteSequence>

新产品发现
没找到

如果产品是针对每台机器或当前用户安装的,则有一个名为MSI的属性。您可以在条件布尔语句中使用它

您还可以检查这些其他MSI安装状态,以防其中一个运行得更好。我从未使用过Wise,但我认为有一种方法可以检索这些属性

<!-- 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."/>
<InstallExecuteSequence>
    <Custom Action="NoUpgrade4U" 
        After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
    <Custom Action="ActivateProduct" 
        OnExit='success'>NOT OLDIEFOUND</Custom>
</InstallExecuteSequence>