web-dev-qa-db-ja.com

WIXプロパティに環境変数を取得します

WIXの環境変数をプロパティに取り込む方法はありますか?

USERPROFILEを次のように取得しようとしています。

Property Id="UserFolder"  Value="$(env.USERPROFILE)\EdwardsApp\MyFolder"

ただし、これは、インストーラーがビルドされるビルドマシンのUSERPROFILEのみを取得します。

アプリがインストールされているマシンのUSERPROFILEを使用したい。

17
Edward

インストール中に環境変数を利用できますが、これにはカスタムアクションを使用する必要があります。 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

11
fletcher

別の方法は、 SetProperty要素 を使用することです-タイプ51のカスタムアクションを効果的に作成します。カスタムアクションを使用するよりも簡単です。スケジュールを個別に指定する必要がないためです。すべてが1つの要素で実行されます。以下の例では、プロパティが空の場合、つまりコマンドラインから渡されなかった場合にのみプロパティを設定します。

例:

<SetProperty Id="PROP_MYSOME"
             Before="InstallInitialize" 
             Sequence="execute"
             Value="[%USERDOMAIN]">
    <![CDATA[NOT Installed AND PROP_MYSOME=""]]>
</SetProperty>
18
demp

まだコメントを追加できないので、@ dempの回答に関しては、初期化中に条件を評価してUIダイアログに値を表示できるようにするために、これを行う必要がありました。

    <SetProperty Id="MY_PROPERTY" Value="[%USERDOMAIN]" After="LaunchConditions" Sequence="first"  />

believethat Before="InstallInitialize"は、インストール自体が進行する直前(つまり、ファイルのコピーなど)に発生し、notインストーラー自体の初期化フェーズ中に発生します。

4
andrew-g-za

私の場合、ターゲットマシンのUSERPROFILE環境変数を取得して、そこにすべてのファイルをインストールすることを検討しています。私はそれを次のように達成しました:

<Property Id="HOME_FOLDER" >
  <DirectorySearch Id="userProfileSearch" Depth="0" Path="[%USERPROFILE]" />
</Property>

次に、すべてのファイルが目的の場所に移動しました。

4
esra