2012-07-05 43 views
8

我想在文件複製到目標文件夾後執行自定義操作。如何在wix中複製文件後調用自定義操作

在自定義操作中,我運行復制的腳本文件,因此找不到錯誤文件。

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


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

此自定義操作給出錯誤文件/目錄未找到。所以此操作在文件複製之前調用。

那麼,如何在文件複製後調用自定義動作?

我不明白爲什麼這個自定義動作調用InstallFiles之前,即使我指定後=「InstallFiles」。

+0

讓您的CA延期:'執行a =「延期」' – 2012-07-05 14:12:31

+1

如果我使用執行=「延期」,然後給我的錯誤: – 2012-07-06 04:32:19

+4

你怎麼會「無法從非立即自定義動作訪問 會議細節」解決你的問題? – guiomie 2012-12-05 00:23:39

回答

4

當您使用延遲自定義操作時,必須通過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 [「」]訪問代碼中的這些屬性。

只是補充,bellow是如何在InstallExecuteSequence調用自定義操作的示例。

<Custom Action="CustomActionID_Data" After="InstallFiles">NOT (REMOVE="ALL")</Custom> 
<Custom Action="CustomActionID" After="CustomActionID_Data">NOT (REMOVE="ALL")</Custom>