2017-08-01 5 views
1

WIXベースのインストーラに機能を追加しようとしています。 WIXを使ったのは初めてのことなので、それは全く新しいものです。WIXツールセットを使用してファイルをダウンロードしてコピーする

私がしようとしているのは、msiexecを使用するときにユーザーが認証トークンのコマンドライン引数を渡すことができるようにすることです。

インストーラはauthトークンを使用してAPI呼び出しを行います。 authが失敗すると、インストーラは終了します。それ以外の場合、インストーラはAPIを使用してファイルをダウンロードし、インストールディレクトリ(おそらくProgram Filesの下にある)にコピーします。

私はWIXのコマンドライン引数をプロパティとして読み込み、C#でカスタムアクションを作成してファイルの認証/ダウンロードを処理しました。

私が苦労しているのは、ファイルをインストール場所にコピーするためにCustomActionが取得されていることです。その場所に書き込む権限がないためです。

execute="deffered""impersonate=noを設定して昇格させた特権で実行することはできますが、sessionオブジェクトからプロパティを読み取ることはできません。

可能性の高い別のオプションは、CustomAction(昇格された権限なしで動作する)の一時的な場所にファイルを保存し、新しいプロパティを設定することです。次にSourcePropertyCopyFileコンポーネントを使用して、そのファイルをターゲットの場所にコピーできます。

しかし、CustomActionが実行されるまで、プロパティが設定されないため、CopyFileコンポーネントの前にCustomActionを実行する方法を理解することはできません。 CustomAction beforeをインストールして実行するだけで簡単ですか、それともそれ以上ですか?

+1

"MoveFiles"(http://wixtoolset.org/documentation/manual/v3/xsd/wix/copyfile.htmlにはDuplicateFilesとMoveFilesの表があり、MoveFilesを使用すると仮定しています)ファイル要素のIDを参照していないCopyFileを定義するときにテーブル)が、私はあなたのカスタム化を実行し、ファイルをインストールディレクトリにダウンロードできるようにする答えを追加しています。 –

答えて

1

遅延カスタムアクション中にセッションオブジェクトからプロパティを読み取ることはできますが、コマンドラインで渡されたパブリックプロパティを定義してSecure="yes"とし、遅延カスタムアクションを実行する前に実行する2番目のカスタムアクションを作成するだけです実行中にpublicプロパティの値を読み取れるように、遅延アクションのCustomActionDataプロパティ。

あなたはこの

<Property Id="AUTHTOKEN" Secure="yes" Hidden="yes" /> 

<CustomAction Id="AuthenticateDownload" BinaryKey="CustomActionsDLL" DllEntry="Download" Execute="Deferred" Impersonate="no" /> 
<CustomAction Id="SetAuthenticateDownload" Property="AuthenticateDownload" Value="AUTHTOKEN=[AUTHTOKEN];INSTALLDIR=[INSTALLDIR]" /> 

<InstallExecuteSequence> 
    <Custom Action="SetAuthenticateDownload" Before="AuthenticateDownload">NOT Installed AND NOT UPGRADINGPRODUCTCODE AND NOT REMOVE~="ALL"</Custom> 
    <Custom Action="AuthenticateDownload" Before="InstallFiles">NOT Installed AND NOT UPGRADINGPRODUCTCODE AND NOT REMOVE~="ALL"</Custom> 
</InstallExecuteSequence> 

のようなものを定義する必要がありますそして、あなたが今

string AuthToken = session.CustomActionData["AUTHTOKEN"]; 
string InstallDir = session.CustomActionData["INSTALLDIR"]; 

... try download to installdir ... 

必要にいくつかのことを使用する必要があるカスタムアクション内のプロパティ値であなたの合格にアクセスするには継承されたアクションにプロパティを渡すことを検討するには、使用するCustomActionのIDのEXACT名でプロパティを設定する「Set」アクションを使用する必要があります。次に、PropertyName = PropertyValueのコンマ区切りのリストを使用しますあなたが使うことができる形式の意味です[]内のインストーラープロパティーを値として使用します。

カスタムアクションの条件によって、このカスタムアクションはマシンに新しい製品をインストールしているとき(アップグレードまたは削除ではない)にのみ実行されます。最初のインストールでアクションが実行され、アップグレードでは実行されないようにする場合は、そこにAND NOT WIX_UPGRADE_DETECTEDを投げてください。

逆のカスタムアクションを追加して、アンインストール時にこれらのファイルを削除することを忘れないでください。

関連する問題