1

インストール内のファイルの 1 つを、ユーザーの宛先マシンのレジストリ キーと値のペアが指す場所にコピーする必要があります。

現在、コンポーネント ビューでファイルを [TempFolder] にコピーするように設定し、レジストリから値を取得する OnFirstUIBefore() 関数でいくつかのカスタム InstallScript コードを使用する、一種の厄介なソリューションがあります。 [TempFolder] の MSIGetProperty と、最後に [TempFolder] から以前にレジストリから取得したパスへの CopyFile()。

これは機能しますが、少し面倒です。同僚は、 MY_RSRC_DIRのようなカスタム プロパティ名で MSISetProperty を実行し、コンポーネント ペインでそのカスタム プロパティを使用してファイルを正しい場所にコピーできるようにすべきだと考えていると言っています。

OnBegin() 関数で MSISetProperty を実行することはできますが、そのプロパティを Components ビューにプラグインしようとすることは、まだ機能していません。

誰かがこれを行ったことがありますか?もしそうなら、どのように?

4

1 に答える 1

1

InstallScript MSI プロジェクトでは、MSI アプローチを採用する必要があります。補助フォルダーを作成し (たとえば、[ファイルとフォルダー] ビューに追加する)、そこにファイルを追加します。そのディレクトリ プロパティを確認してください (NEWFOLDER1 のようなもの。すべて大文字であることを確認してください)。必要に応じて、Directory テーブルを編集してこれを TARGETDIR の子にすることもできますが、これはオプションであり、レジストリ検索が失敗した場合に [WindowsVolume] の下にファイルが配置される可能性があるため、INSTALLDIR の子として残すのがおそらく最善です。 .

次に、コストを計算する前 (つまり、OnBegin となる CostInitialize の前) にディレクトリを見つけることができれば、システム検索、SetProperty カスタム アクション (タイプ 51)、または MsiSetProperty() を使用してプロパティ (例: NEWFOLDER1) を設定できます。原価計算後にそれを見つける必要がある場合は、プロパティがディレクトリを更新しなくなるため、SetDirectory カスタム アクション (タイプ 35) または MsiSetTargetPath() のいずれかを使用する必要があります。

これにより、Windows インストーラーがファイルの場所を追跡し、アンインストールが適切に機能するようになります。

于 2009-05-01T18:52:20.297 に答える