私のアプリケーション用のWindowsインストーラがあります。アプリケーションパッケージには、カスタムアクションで実行されるアクションのいくつかが実行されるインストーラークラスも含まれます。Windowsインストーラによるアプリケーションのインストールに関する問題
インストーラーは、インストール時にカスタムアクションから別のアプリケーションをインストールします。このアプリケーションが既にインストールされているか、Y/Nを再インストールするためのメッセージボックスをインストールしたくないという同じバージョンのアプリケーションが既に存在するかどうかを知りたいです。
私のアプリケーションが既にインストールされていて、同じインストーラをもう一度クリックすると、「修復」と「削除」オプションが表示されます。しかし、インストーラが新しくビルドされている場合は、「別のバージョンが既にインストールされています...プログラムの追加と削除を使って削除します」というダイアログが表示されます。だから私はそれをアンインストールせずに既存のバージョンを更新することはできません。既存のバージョンを更新するにはどうすればよいですか?
これらの2つのクエリに関するヘルプやガイダンスは高く評価されています。私はこれらのためにネットで見たが、適切な答えを得ることができませんでした。あなたが私を助けることができれば、それは本当に素晴らしいでしょう。
CODE
prouct.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="My.Bootstrapper.ABC">
<!-- Create Package, Product Manifest http://msdn.microsoft.com/en-us/library/ee335702.aspx
Schema Reference : http://msdn.microsoft.com/en-us/library/ms229223.aspx
-->
<PackageFiles>
<PackageFile Name="XYZ.exe"/>
</PackageFiles>
<InstallChecks>
<!-- If its installed, it will be in Uninstall. DisplayName will be XYZ2.1_rc22
Can still get values of DisplayVersion (2.1_rc22) & UninstallString from this key
-->
<RegistryCheck
Property="IS_XYZ_INSTALLED"
Key="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XYZ"
Value="DisplayName"/>
</InstallChecks>
<Commands>
<Command PackageFile="XYZ.exe" Arguments="/Install">
<InstallConditions>
<BypassIf Property="IS_XYZ_INSTALLED"
Compare="ValueEqualTo" Value="XYZ2.1_rc22"/> // tHIS IS THE DISPLAYNAME, THAT I SEE IN REGISTY
<FailIf Property="AdminUser"
Compare="ValueNotEqualTo" Value="True"
String="NotAnAdmin"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes>
</Command>
</Commands>
</Product>
のpackage.xml
<?xml version="1.0" encoding="utf-8" ?>
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName" Culture="Culture">
<!--Check for XYZversion 2.1_rc22 -->
<Strings>
<String Name="DisplayName">Install My XYZ</String>
<String Name="Culture">en</String>
<String Name="NotAnAdmin">Administrator permissions are required to install XYZ.Contact your
administrator.</String>
<String Name="GeneralFailure">A general error has occurred while installing this
package.</String>
</Strings>
</Package>
UPDATE:それはaleradyにインストールされていない場合、私はXYZをインストールしたい PC。上記のコードでは、前提条件としてインストールされません。前提条件で私のアプリケーションを選択し(Windows Installer 3.1 & .NET3.5)、「自分のアプリケーションと同じ場所からprereqをダウンロードする」を選択しました。セットアッププロジェクトのビルド時に、Relに3つのフォルダがあります(winInsの場合、&私のアプリは事前にXYZとしてインストールされています)。現時点では、私のコンピュータにはXYZがインストールされていないので、キーは見つかりません。インストーラをインストールすると、アプリがインストールされますが、プリインストール(XYZ.exe)アプリケーションはインストールされません。どこが間違っていますか?
ありがとうございました。
カスタムアクションに他のアプリケーションをインストールするには、別のMSIですか? – Jodrell
@ Jodrell、他のアプリケーションはWindowsインストーラファイルです。カスタムアクションでは、インストールの下にそのフィールを追加しました。したがって、インストールプロセス中に実行され、exeファイルが他のアプリケーションをインストールします。 – Tvd