WIXの環境変数をプロパティに取り込む方法はありますか?
USERPROFILE
を次のように取得しようとしています。
Property Id="UserFolder" Value="$(env.USERPROFILE)\EdwardsApp\MyFolder"
ただし、これは、インストーラーがビルドされるビルドマシンのUSERPROFILE
のみを取得します。
アプリがインストールされているマシンのUSERPROFILE
を使用したい。
インストール中に環境変数を利用できますが、これにはカスタムアクションを使用する必要があります。 UserFolder
プロパティを Type 51 Custom Action
ビルド中にプロパティを設定するのとは対照的です。 [%ENVVARNAME]形式は環境変数を使用するために使用されますが、環境変数の名前では大文字と小文字が区別されます。
プロパティを設定するカスタムアクションのWiXの例:
<CustomAction Id="SetUserFolder" Property="UserFolder" Value="[%USERPROFILE]EdwardsApp\MyFolder" />
WiXのカスタムアクションの詳細については、こちらをご覧ください。
http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx
別の方法は、 SetProperty要素 を使用することです-タイプ51のカスタムアクションを効果的に作成します。カスタムアクションを使用するよりも簡単です。スケジュールを個別に指定する必要がないためです。すべてが1つの要素で実行されます。以下の例では、プロパティが空の場合、つまりコマンドラインから渡されなかった場合にのみプロパティを設定します。
例:
<SetProperty Id="PROP_MYSOME"
Before="InstallInitialize"
Sequence="execute"
Value="[%USERDOMAIN]">
<![CDATA[NOT Installed AND PROP_MYSOME=""]]>
</SetProperty>
まだコメントを追加できないので、@ dempの回答に関しては、初期化中に条件を評価してUIダイアログに値を表示できるようにするために、これを行う必要がありました。
<SetProperty Id="MY_PROPERTY" Value="[%USERDOMAIN]" After="LaunchConditions" Sequence="first" />
私believethat Before="InstallInitialize"
は、インストール自体が進行する直前(つまり、ファイルのコピーなど)に発生し、notインストーラー自体の初期化フェーズ中に発生します。
私の場合、ターゲットマシンのUSERPROFILE環境変数を取得して、そこにすべてのファイルをインストールすることを検討しています。私はそれを次のように達成しました:
<Property Id="HOME_FOLDER" >
<DirectorySearch Id="userProfileSearch" Depth="0" Path="[%USERPROFILE]" />
</Property>
次に、すべてのファイルが目的の場所に移動しました。