2017-11-09 16 views
-2

ダイアログボックスのテキストボックスを使用してユーザーから「名前」入力を受け取るWiXでインストーラを開発しています。この名前は、私がインストールしている製品の名前に使用されます。WiX - プログラムの追加と削除でインストールされた製品の名前が動的に変更される

ただし、インストール時に製品名を動的に設定することはできません。私はカスタムアクションを使用する場合でも、レジストリエントリは、私が以前に提供した静的な名前で作成されています。これは最終的に不一致につながります。

誰でもこの点についてお手伝いできますか?

答えて

1

これはカスタムアクションでは実行できません。インストールの早い段階でカスタムアクション(51など)でProductNameプロパティを設定でき、実際にはUIの名前は変更されますが、インストールされた製品の名前は変更されません。元の値と同じです。たとえば、インストールされた製品を列挙すると、元の名前が返されます。

これを行うには、起動する前にMSIファイルのProductNameを変更するしかありません。 MSIファイルを変更してインストールする起動プログラムがあります。 MSIファイルは、プロパティテーブルで変更してProductNameの値を変更できるデータベースです。この例では、あなたの一般的な考え方与える:

How do I add/update a property inside an MSI from the command-line?

を基本的に次のようなSQLでMsiOpenViewその後、開いているデータベース(MsiOpenDatabaseまたは同等)を開きます。

「UPDATEプロパティSET Property.Value = 'あなたの変数' WHERE Property.Property = 'CurrentProductName' "

次にMsiViewExecuteとハンドルを閉じます。詳細は、ご使用のコーディング言語環境によって異なります。

これは理想的な解決策ではありません。MSIファイルがデジタル署名されていれば、それを改ざんしてもはや正しいものではないからです。

もう1つの方法は、MSIファイルのコピーを変更することに基づいて変換ファイルを生成することです。 MSIファイルのコピーを作成し、上記のようにProductNameの変更を行うと、変換ファイル、.mstファイル、2つのMSIファイルの違いを生成するMsiDatabaseGenerateTransform()呼び出しを実行できます。 TRANSFORMS = [the .mst file]を含むコマンドラインを使用して元の変更されていないMSIファイルをインストールし、ProductNameを更新してインストールを開始します。

これはWindowsインストーラ製品が動的な製品名を持つように設計されていないため、非常に簡単です。たぶん歴史的にもWindowsインストーラのセットアップ前でも、これはもっと実用的でしたが、MSIセットアップではありませんでした。

+0

助けてくれてありがとう@PhilDW! :-)私はあなたの答えに基づいて取られるべき関連するステップを調べます... –

関連する問題