12

ファイルが宛先フォルダーにコピーされた後にカスタム アクションを実行したい。

カスタム アクションでは、コピーしたスクリプト ファイルを実行するので、エラー ファイルが見つかりません。

<CustomAction Id="RunDBScript"
              BinaryKey="CA"
              DllEntry="RunDBScript"
              Execute=" immediate"
              Return="check" />


<Custom Action="RunDBScript" After="InstallFiles">
    <![CDATA[NOT Installed]]>
  </Custom>

このカスタム アクションは、ファイル/ディレクトリが見つからないというエラーを出します。したがって、このアクションはファイル コピーの前に呼び出します。

では、ファイルのコピー後にカスタム アクションを呼び出す方法は?

After="InstallFiles" が指定されているにもかかわらず、このカスタム アクションが InstallFiles の前に呼び出される理由がわかりません。

4

2 に答える 2

7

InstallFinalizeの後にカスタム アクションを移動します。これは、製品ファイルのインストール後に即時アクションを実行できる InstallExecuteSequence 内の唯一の場所です。

于 2012-07-06T06:23:18.460 に答える
5

遅延カスタム アクションを使用する場合は、session.CustomActionData["propertyname"] を介して値にアクセスする必要があります。

セッション ディクショナリ値は、実行スクリプトが書き込まれている即時カスタム アクションによってのみ読み取ることができます。

延期されたカスタム アクションはスクリプトの実行時に実行されるため、プロジェクト プロパティは使用できなくなります。これを利用するには、実際のカスタム アクションに必要なプロパティを提供するために、ダブル カスタム アクションを実装する必要があります。

以下の例に従ってください。

<CustomAction Id="CustomActionID_Data" Property="CustomActionID" Value="INSTALLDIR=[INSTALLDIR];OTHERPROPERTY=[OTHERPRPJECTPROPERTY]"></CustomAction>
<CustomAction Id="CustomActionID" BinaryKey="FILEBINARYID" DllEntry="METHODNAMEATCUSTOMACTION" Execute="deferred"></CustomAction>

この例では、InstallExecutionSequence でカスタム アクション "_Data" を呼び出し、その後に実際のアクションを呼び出す必要があるため、最初の "_Data" が必要なプロパティを設定します。次に、session.CustomActionData[""] を使用してコードのこれらのプロパティにアクセスできます。

補足として、InstallExecuteSequence でカスタム アクションを呼び出す方法の例を以下に示します。

<Custom Action="CustomActionID_Data" After="InstallFiles">NOT (REMOVE="ALL")</Custom>
<Custom Action="CustomActionID" After="CustomActionID_Data">NOT (REMOVE="ALL")</Custom>
于 2015-11-17T17:57:17.323 に答える