0
私は自分のアプリケーションの.msiを生成するためにWix Toolsetを使用しています。すべてが新しいバージョンにアップグレードするときは、新しいバージョンのインストールを実行するたびにセットアップが既にインストールされている機能を検出するのではなく、デフォルトで「必須」という機能がデフォルト設定になります。ユーザーがインストールを再度明示的にチェックしない限り、それらは削除されます。Wixのアップグレードmsiがすでにインストールされている機能を削除しています
新しいバージョンがインストールされるたびに、現在どの機能がインストールされているかを.msiが検出することはありますか?
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" UpgradeCode="9e578e3d-0119-425c-8633-f54ffaaa4929" Name="@[email protected]" Version="@[email protected]" Manufacturer="@[email protected]" Language="1033">
<Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Comments="@[email protected]" Description="@[email protected]"/>
<Media Id="1" Cabinet="myapp.cab" EmbedCab="yes" />
<!-- Installer Properties -->
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
<PropertyRef Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED"/>
<!-- Check Existing Install -->
<Upgrade Id="9e578e3d-0119-425c-8633-f54ffaaa4929">
<UpgradeVersion Minimum="@[email protected]" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
<UpgradeVersion Minimum="0.0.0" Maximum="@[email protected]" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/>
</Upgrade>
<Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition>
<!-- Prerequisites -->
<Condition Message="This application requires .NET Framework 4.6 or newer. Please install the .NET Framework then run this installer again.">
<![CDATA[Installed OR WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED]]>
</Condition>
<Condition Message="This application is only supported on Windows 7, Windows Server 2008 R2 or higher.">
<![CDATA[Installed OR (VersionNT >= 601)]]>
</Condition>
...
<Feature Id="Feature_Application"
Title="Application"
ConfigurableDirectory="APPLICATIONDIR"
Level="1"
AllowAdvertise="no">
@[email protected]
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="CleanupApplicationData" />
</Feature>
<!-- Feature: My Service -->
<Feature Id="Feature_Service"
Title="My Service"
Description="My Service"
ConfigurableDirectory="REPORTDIR"
Level="3"
AllowAdvertise="no">
@[email protected]
<ComponentRef Id="ServiceShortcut" />
<Component Id="MyServiceInstaller_ServiceControl" Guid="B72CAA3F-F2DB-48D2-90DD-061209AB2CE5" Directory="REPORTDIR">
<CreateFolder />
<File Id="MyService.exe" Name="MyService.exe" KeyPath="yes" Source="@[email protected]\MyService\MyService.exe"/>
<ServiceInstall Id="MyServiceInstaller_ServiceInstall"
Type="ownProcess"
Vital="yes"
Name="Windows Service"
DisplayName="Windows Service"
Description="Windows service"
Start="auto"
Account="NT AUTHORITY\LocalService"
ErrorControl="ignore"
Interactive="no" />
<ServiceControl Id="MyServiceInstaller_ServiceInstall"
Name="My Service"
Stop="both"
Remove="uninstall"
Wait="yes" />
</Component>
</Feature>
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>
<UIRef Id="WixUI_FeatureTree" />
<UI>
<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />
<!-- Add the GUI logic for installation -->
</UI>
</Product>
奇妙に思えるあなたのUIが戻って「デフォルト」の値に状態を再設定されていない限り、MigrateFeatureStates標準アクションは、このの世話をする必要があります。私は、UI(msiexec/i install.msi/l * v UILog.txt)と静かに(msiexec/i install.msi/qn/l * v quietLog.txt)のアップグレードを2度おこなうことをお勧めします。機能の状態が発生します。 –
(!FeatureID = 3)を使用して、機能がインストールされているかどうかを検出できます。 詳細については、リンクを確認してください: https://www.firegiant.com/wix/tutorial/com-expression-syntax-miscellanea/expression-syntax/ –