Windowsインストーラーにショートカットを変更したものに置き換えるように強制する方法は?

StackOverflow https://stackoverflow.com/questions/4622205

  •  30-09-2019
  •  | 
  •  

質問

最近、いくつかのデスクトップショートカットをわずかに変更する必要がある機能をインストーラーに追加しました(バージョン番号が名前に追加されました)。インストーラーに古いショートカットを新しいショートカットに置き換えるのに問題があります。問題が最初に報告されたとき、新しいショートカットがインストールされていましたが、古いショートカットは削除されていませんでした。問題に取り組んだ後、私はさまざまな問題を抱えています。古いショートカットの1つは削除されています(これまでのところ、とても良い)が、もう1つは(それほど良くない)、どちらの場合も、新しいショートカットは新しいショートカットです。インストールされていません(さらに悪い)。これらのショートカットをインストールする各コンポーネントの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つの古いショートカットで異なることをしている理由を説明するために途方に暮れています。

参考までに:私の開発環境は賢明なインストールスタジオ7.0です。

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

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

...
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行で報告されたアクションは不在ではなくnullです。

編集2: 現在の動作は、古いショートカットがインストールされたままであり、新しいショートカットがインストールされていないことです。コンポーネントを再調整すると、古いショートカットが削除されており、新しいショートカットはまだインストールされていません。クリストファーペインターのソリューションを試しましたが、どちらもどこにも行きませんでした。 (その答えについての私のコメントを参照してください。)古い違いのないものの代わりに新しいバージョンのショートカットをインストールする方法が必要です。動作するソリューションを提供できる人はいますか?

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

役に立ちましたか?

解決 2

各ターンオーバー(ビルド番号が常に増加している)ごとにすべてを再分散させると、WIに関する限り、それは大きなアップグレードです。交換する必要があるショートカットは、私が望んでいた結果を達成しました。

他のヒント

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

2つの可能性:

1)removefileテーブルを使用して、古いショートカットを取り除きます。

2)古いコンポーネントを古いファイルで維持し、ノーオプ条件(グーグルグーグルアップグレード別名パンクコンポーネントパターンでファイルを削除する方法)を使用してコンポーネントを引き起こし、ファイル /ショートカットを削除します。新しいショートカットを取得するために、新しいファイル名と新しいショートカット名をインストールする新しいコンポーネントを作成します。

最初に#1を試してみると思います。 :-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top