web-dev-qa-db-ja.com

延期されたカスタムアクションでセッションの詳細にアクセスする別の方法はありますか?

カスタムアクションがあり、インストールフォルダーからVS2010フォルダーに一部のパーツをコピーするために以下の値を取得する必要があります

  1. VS2010ディレクトリパス(VS2010DEVENVプロパティ)
  2. インストールパス(INSTALLLOCATIONプロパティ)

十分な権限を与えるために、カスタムアクションをExecute='deferred' Impersonate='no'として設定しました。しかし、インストーラーを実行すると、次のメッセージがログに記録されました。

非即時のカスタムアクションからセッションの詳細にアクセスできません

「延期された」カスタムアクション(つまり、session["VS2010DEVENV"])でプロパティにアクセスできないようです。

必要に応じてこれらの値を取得できるようにする他の方法はありますか?

30
jcha

This 役立つはずです。ページの下部、 CustomActionData を介して値を渡す方法の2つのステップのガイドラインに特に注意してください。

抜粋は次のとおりです。

遅延実行カスタムアクション中に使用するために、プロパティの値をインストールスクリプトに書き込むには:

  1. 目的のプロパティを遅延実行カスタムアクションと同じ名前のプロパティに設定する小さなカスタムアクションをインストールシーケンスに挿入します。たとえば、遅延実行カスタムアクションの主キーが「MyAction」の場合、「MyAction」という名前のプロパティを、取得する必要のあるプロパティXに設定します。 「MyAction」カスタムアクションの前に、インストールシーケンスで「MyAction」プロパティを設定する必要があります。どのタイプのカスタムアクションでもコンテキストデータを設定できますが、最も簡単な方法は、プロパティ割り当てカスタムアクション(たとえば、カスタムアクションタイプ51)を使用することです。
  2. インストールシーケンスが処理されるときに、インストーラーはプロパティXの値をプロパティCustomActionDataの値として実行スクリプトに書き込みます。
31
Yan Sklyarenko

追加の詳細:「カスタムアクションタイプ51」(基本的にはプロパティ値を設定する単なるカスタムアクション)で次の構文を使用して、複数のプロパティ値を渡すことができます。

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=...

値は、次のようにカスタムアクション内から取得できます。

string prop1 = session.CustomActionData["PROPERTY1"];
string prop2 = session.CustomActionData["PROPERTY2"];

ID「MyCustomAction」のカスタムアクションのプロパティ値を設定する例を次に示します。

<CustomAction
  Id="SetCustomActionPropertyValues"
  Property="MyCustomAction"
  Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" />

(read このMSDN記事 この例ではID "MyExecutableFile"のファイルのインストール場所を取得するために使用されるフォーマットされた構文の詳細について)

13
bernhof