2011-09-05 4 views
25

私はカスタムアクションを持っているとVS2010フォルダにインストールフォルダからいくつかの部分をコピーするための値遅延カスタムアクションでセッションの詳細にアクセスする別の方法はありますか?

  1. VS2010のディレクトリパス(VS2010DEVENVプロパティ)
  2. インストールパス(INSTALLLOCATIONプロパティ)
の下に取得する必要があります

十分な特権を与えるために、私はExecute='deferred' Impersonate='no'としてカスタムアクションを設定しました。インストーラを実行する場合でも、それはメッセージをログに記録:

我々が「延期」カスタムアクションでプロパティにアクセスすることはできませんと思われる非即時カスタムアクションからのセッションの詳細にアクセスすることはできません(つまり、 session["VS2010DEVENV"]

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

答えて

28

Thisは参考にする必要があります。 CustomActionDataで値を渡す方法を2ステップのガイドライン、ページの下部に特に注意してください。ここで

は抜粋です。

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

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

感謝をMyExecutableFile』) ](http://msdn.microsoft.com/en-us/library/aa370543.aspx) ** CustomActionData **プロパティはうまく機能します。しかし、私は複数の価値をどのように引き渡すことができるのだろうと思っています。私の場合は、VS2010とインストールフォルダの両方の値が必要です。可能であればヒントを教えてください。 – jcha

+11

遅延カスタムアクションで渡した文字列を解析する必要があります。たとえば、 '[VS2010DEVENV] | [INSTALLLOCATION]'を渡し、遅延CAでCustomActionDataを '|'で分割することができます。あなたのCAにDTFを使用する場合、それは辞書のようなCustomActionDataプロパティを持ち、 'vs2010 = [VS2010DEVENV]; location = [INSTALLLOCATION]'のように渡すことができ、 'session.CustomActionData [" vs2010 "] 'と' session.CustomActionData ["location"] ' –

+0

素晴らしい!私の場合は完全に解決します。あなたのアドバイスをありがとうございました。 – jcha

11

その他の詳細:

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=... 
:複数のプロパティ値は、(基本的にプロパティ値を設定し、単にカスタムアクションである)「カスタムアクションタイプ51」で、次の構文を使用して渡すことができます

値は、このようなカスタムアクションの中から検索することができます。

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

はここでID「MyCustomAcでカスタムアクションのプロパティ値を設定例を示しますン ":

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

(この例ではIDを使用してファイルのインストール場所を検索するために使用されるフォーマットされた構文の詳細についてはthis MSDN articleを読む『[参照のため

+4

具体例のおかげで多くの。ちょうど私が必要なもの。将来の訪問者はさらに詳細と例については[この回答](http://stackoverflow.com/a/11233268/660536)を参照する必要があります。 – GazTheDestroyer

関連する問題