4

以前のバージョンのアプリが終了した場合にアップグレードするインストールがあります。インストールがアップグレードモードの場合、特定のアクションをスキップしたいのですが。インストールがアップグレードモードで実行されているのか、初回インストールモードで実行されているのかを判断するにはどうすればよいですか?

私はWiseInstallerを使用していますが、それは問題ではないと思います。Windowsインストーラーには、インストーラーがアップグレードモードのときに設定されるプロパティがあると想定しています。見つからないようです。プロパティが存在する場合は、条件ステートメントで使用できると想定しています。

4

3 に答える 3

2

このインストーラーの作成に使用しているツールの種類を詳しく教えてください。

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>
于 2008-09-28T15:15:36.893 に答える
1

製品がマシンごとに、または現在のユーザーに対してインストールされている場合に true になる、InstalledというMSI プロパティがあります。条件付きブール文で使用できます。

これらの他の MSI インストール ステータスプロパティを確認することもできます。私は Wise を使ったことはありませんが、これらのプロパティを取得する方法があると思います。

于 2008-09-29T01:56:11.393 に答える
-1

あなたの質問を理解できたかどうかわかりません。
インストール スクリプトを自分で作成している場合、Windows での最善の方法は、プログラムが通常作成するレジストリ キーを確認することです。インストール ディレクトリ (およびスタート メニュー エントリなど) とは異なり、これは不変です。これらのキーの 1 つは、ソフトウェアのバージョン番号であり、ユーザーが古いバージョンをインストールしようとした場合にチェックするため (または、いくつかのファイルを削除する必要があるかどうかを知るためなど) です。

于 2008-09-28T14:41:20.610 に答える