0

2つ以上のバージョンを並行してインストールできる基本的なMSIプロジェクトがあります。共有され、デスクトップにショートカットがある単一のexeを除いて、それぞれが異なる場所にインストールされます。

バージョン 1.0 の MSI では、コンポーネント – ファイルを \Program Files\prod_1.0 にインストールします。共有ファイル コンポーネント A - exe を \Program Files\prod_shared にインストールします。

バージョン 2.0 の MSI では、コンポーネント – ファイルを \Program Files\prod_2.0 にインストールします。共有ファイル コンポーネント A - exe を \Program Files\prod_shared にインストールします。

コンポーネント GUID は両方の MSI バージョンで同じであり、共有ショートカット コンポーネントで使用しているアイコンは他のショートカットでは使用されていません。私が抱えている問題は、2つのバージョンがある場合ですか? 並行してインストールしてから、1 つのバージョンをアンインストールします。デスクトップ ショートカットを削除します。この行をコード MsiSetComponentState(hMSI,"Shared_Shortcut_Desktop",INSTALLSTATE_ABSENT); に追加しました。

しかし、アンインストールすると、「NewShortcut74_AE5D17DE4C4B4737ABB20A0D0358B69E.exe」アイコンが削除されないように、コンポーネントが削除されないというメッセージが表示されます。

それを解決する方法はありますか?

4

1 に答える 1

0

これらの 2 つのショートカットが同じコンポーネント guid を持っている場合、他に何も言わない限り、それは実際には単なる共有コンポーネントであり、両方のセットアップで共有されているため、いずれかをアンインストールしても削除されません。同じコンポーネント ID を持つ共有ファイルが (たとえば) 同じ CommonFiles フォルダーの場所にインストールされている場合、同じルールが適用されます。ファイルは他の製品で使用されているため、削除されません。簡単な答えは、別の GUID を使用することです (製品バージョンに合わせて名前も変更します)。

これと関係がある MsiSetComponentState への参照は何ですか? そのコンポーネントを削除しようとするコードを記述したことを意味しますが、いずれにせよ共有されている場合、MSI はそれを削除しません。

于 2015-06-03T21:07:34.220 に答える