MSP パッチをインストールした後、Windows インストーラーは、最初の MSI で提供されるすべての機能をインストールすることを決定します。MSP パッチが利用可能なすべての機能をインストールしないようにするにはどうすればよいですか?
機能リクエストは次のように表示されます。
Installed: Absent
Request: local
Action : local
すべてのインストールを要求するのはなぜですか?
MSP パッチをインストールした後、Windows インストーラーは、最初の MSI で提供されるすべての機能をインストールすることを決定します。MSP パッチが利用可能なすべての機能をインストールしないようにするにはどうすればよいですか?
機能リクエストは次のように表示されます。
Installed: Absent
Request: local
Action : local
すべてのインストールを要求するのはなぜですか?
ADDLOCAL プロパティがすべてのアンインストール済み機能に設定されていることがわかりました。これにより、それぞれに「Request: local」が発生しました。この問題を解決するために私がしたことは、このプロパティを削除する小さなカスタム アクションを使用することでした。インストールする機能をそのアクションの前に定義する必要があるため、CostFinalize の前に実行する必要があります。変数 REINSTALL は、既にインストールされている機能を保持し、それらすべてが REINSTALL のために要求されます。したがって、MSP パッチは、既にインストールされている機能のみを再インストールし、アンインストールされた機能はそのままにします。
<CustomAction Id="REMOVE_ADDLOCAL_PROPERTY"
Property="ADDLOCAL" Value="[NonExistentProperty]"
/>
<InstallExecuteSequence>
<Custom Action="REMOVE_ADDLOCAL_PROPERTY" Before="CostFinalize">
<![CDATA[PATCH]]>
</Custom>
</InstallExecuteSequence>
編集: 最終的に、このソリューションは私のパッチの 1 つで機能しましたが、別のパッチでは失敗しました。したがって、これまでに実装した最終的な解決策は、パッチ中に REINSTALL=ALL を設定することです。この MSDN リンクは次のことを示しています。
REINSTALL が ALL に設定されている場合でも、以前にインストール済みの機能のみが再インストールされることに注意してください。したがって、まだインストールされていない製品に対して REINSTALL が設定されている場合、インストール アクションはまったく実行されません。
したがって、これはプロパティを削除するよりも良い解決策だと思いADDLOCAL
ます。また、両方のパッチで機能しました。
最初のインストール時に、選択した機能をレジストリに保存する必要がありADDLOCAL
ます。パッチをインストールするとき、それに応じてレジストリ セットアップADDLOCAL
プロパティから状態を読み取る必要があります。
それ以外の場合、パッチはデフォルトが選択されているかのように実行されるため、不足している機能がインストールされます。
パッチの場合、アクションを参照するアップグレードケースの属性が機能しないという質問にリンクしました。MigrateFeatures
MigrateFeatureStates