0

最近、いくつかのデスクトップ ショートカットの名前を少し変更する必要がある機能をインストーラーに追加しました (バージョン番号が名前に追加されました)。インストーラーが古いショートカットを新しいものに置き換えるのに問題があります。問題が最初に報告されたとき、新しいショートカットはインストールされていましたが、古いショートカットは削除されていませんでした。問題に取り組んだ後、私は複雑な問題を抱えています: 古いショートカットの 1 つが削除されています (これまでのところ、とても良い) が、もう 1 つは削除されていません (あまり良くありません)。どちらの場合も、新しいショートカットはインストールされていません (さらに悪いことに)。これらのショートカットをインストールする各コンポーネントの GUID を変更しようとしましたが、ある時点で、ショートカットを担当する各マージ モジュールの ProductCode プロパティを変更しようとさえしました。

関連するコンポーネントだけを再 GUID すると、インストール状態のログ ファイルが次のように表示されます (デバッグを容易にするために、コンポーネントの名前を少し変更して、古いビルドのものと古いビルドのものを区別できるようにしました)新しい):

...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Null
...

ログでわかるように、新しいショートカットはどちらの場合にも入るはずですが、そうではありません。また、インストーラーが 2 つの古いショートカットを使用して異なることを行っている理由を説明することもできません。

参考: 私の開発環境は Wise Installation Studio 7.0 です。

編集:現在の ProductVersion と ProductCode を除いて、すべてを以前のものにリセットしました。これを行うと、インストーラーは古いショートカットをインストールしたままにしますが、新しいショートカットはインストールしません。(これは、最初に報告され、複製できたものとは異なる動作です。つまり、古いショートカットがインストールされたままになり、新しい (名前が変更された) ショートカットもインストールされました。) 2 つの関連するコンポーネントを再 GUID した後、インストーラー古いショートカットは削除されますが、新しいショートカットはインストールされません。(これはXPで起こっていることです。)

コンポーネントを再 GUID した後のログの関連行は次のとおりです。

...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...

最初の 2 行は、新しいショートカットがインストールされていることを示しているようですが、まだインストールされていません。後で修復すると、新しいショートカットがインストールされます。

元の問題 (アップグレード後に古いショートカットと新しいショートカットの両方が存在する) が複製される可能性のあるインストーラーのコピーを実行すると、上記の最後の 2 行で報告されるアクションは、Absent ではなく Null になります。

編集 2:現在の動作では、古いショートカットがインストールされたままになり、新しいショートカットはインストールされません。コンポーネントを再 GUID すると、古いショートカットは削除され、新しいショートカットはまだインストールされていません。Christopher Painter のソリューションを試しましたが、どちらもうまくいきませんでした。(その回答に関する私のコメントを参照してください。)古いバージョンのないショートカットの代わりに、新しいバージョンのショートカットをインストールする方法が必要です。機能するソリューションを提供できる人はいますか?

編集 3:結局のところ、新しいショートカットがインストールされないという新しい動作は、ソース ファイルを取得する際に犯したミスが原因であり、インストーラーに入ったファイルは最新ではありませんでした。交換する予定だったものとして。最新のファイルがインストーラーにコンパイルされると、目的の結果を得ることができました (古いショートカットはアウト、新しいショートカットはイン)。(詳細については、私の回答を参照してください。)

4

2 に答える 2

1

ショートカットは、ディレクトリ内の単なる .lnk ファイルです。ショートカットの名前を変更するのではなく、削除して新しいものを作成します。メジャー アップグレードを行う場合は、削除/再インストールでこれを処理する必要がありますが、マイナー アップグレードを行う場合は、新しい MSI がそれを認識しないため、古いものは残されます。

2 つの可能性:

1) 古いショートカットを削除するには、RemoveFile テーブルを使用します。

2)古いファイルで古いコンポーネントを保持し、推移的な属性を操作なしの条件で使用します(グーグル マイナーアップグレード別名パンクチャコンポーネントパターンでファイルを削除する方法)コンポーネントとそのファイル/ショートカットが削除されます。インストールする新しいファイル名と新しいショートカット名で新しいコンポーネントを作成し、新しいショートカットを取得します。

まずは#1を試してみようと思います。:-)

于 2011-01-07T04:33:29.377 に答える
0

ターンオーバーごとにすべてを再バージョン化するため (ビルド番号は常に増加します)、これは WI に関する限りメジャー アップグレードであるため、インストールに最新のファイルを取得したら、デスクトップを含むコンポーネントを再 GUID します。置き換える必要のあるショートカットは、私が求めていた結果を達成しました。

于 2011-02-15T17:43:33.827 に答える