1

MSP パッチをインストールした後、Windows インストーラーは、最初の MSI で提供されるすべての機能をインストールすることを決定します。MSP パッチが利用可能なすべての機能をインストールしないようにするにはどうすればよいですか?

機能リクエストは次のように表示されます。

Installed: Absent
Request: local
Action : local

すべてのインストールを要求するのはなぜですか?

4

2 に答える 2

1

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ます。また、両方のパッチで機能しました。

于 2012-09-10T19:58:00.837 に答える
0

最初のインストール時に、選択した機能をレジストリに保存する必要がありADDLOCALます。パッチをインストールするとき、それに応じてレジストリ セットアップADDLOCALプロパティから状態を読み取る必要があります。

それ以外の場合、パッチはデフォルトが選択されているかのように実行されるため、不足している機能がインストールされます。

パッチの場合、アクションを参照するアップグレードケースの属性が機能しないという質問にリンクしました。MigrateFeaturesMigrateFeatureStates

于 2012-09-07T12:03:20.020 に答える