2011-09-13 110 views
2

我有一個custom action我已爲我的安裝程序定義。安裝程序似乎沒有運行。自定義操作未運行

這裏是在WXS文件中定義的自定義動作的臺詞:

<CustomAction Id="GetConfigProperties" BinaryKey="GetPropertiesDLL" DllEntry="GetPropertiesFromConfigFile" /> 

    <InstallExecuteSequence> 
     <RemoveExistingProducts After="InstallInitialize" /> 
     <Custom Action="NewerVersionDetected" After="FindRelatedProducts">NEWERVERSIONDETECTED</Custom> 
     <Custom Action="GetConfigProperties" After="FindRelatedProducts"></Custom> 
     . . .    
    </InstallExecuteSequence> 

    <Binary Id="GetPropertiesDLL" SourceFile="$(var.LPRCore Installer CBP Helper.TargetDir)\LPRCore Installer CBP Helper.CA.dll" /> 

我檢查與海怪的MSI和相應的條目是在MSI的表。

下面的代碼的摘錄中CustomActions.cs文件:

[CustomAction] 
    public static ActionResult GetPropertiesFromConfigFile(Session session) { 
     // Output a start message to the install log 
     session.Log("Begin GetPropertiesFromConfigFile"); 

     . . . 


     return ActionResult.Success; 
    } 

有在哪裏我想看看發生了什麼事情的地方代碼的一些其他session.Log聲明。

現在,我已啓用日誌記錄。當我在記事本中查看日誌文件時,我看不到來自session.Log的呼叫消息。我也沒有看到GetConfigProperties的提及。看起來,自定義操作根本沒有執行。我做錯了什麼?

回答

5

事實證明,自定義操作不運行,因爲:

  1. 它被安排運行在錯誤的地方。我的錯,我需要把它放在InstallUISequence部分,而不是InstallSequence部分。

  2. 我在操作運行之前中止了安裝。

當我把自定義動作放到InstallUISequence部分,並在正確的地方,一切運行良好。

感謝您的嘗試。

Tony

-1

我認爲你缺少自定義操作應該運行的條件。要麼給一些條件<Custom Action="GetConfigProperties" After="FindRelatedProducts">NOT INSTALLED AND NOT REMOVE</Custom>或者,如果你想讓它默認然後把1作爲條件 <Custom Action="GetConfigProperties" After="FindRelatedProducts">1</Custom>

+2

不,這是不正確的。如果您省略該條件,則默認爲1 –

2

如果你沒有看到你的日誌文件GetConfigProperties自定義操作中的任何條目,最有可能的原因是,InstallExecutesequence元素位於單獨的片段中,該片段未包含在軟件包中。要將Fragment的內容包含到包中,您應該從Product元素中引用其中的任何元素。

例如,您可以將下面的行添加到產品元素:

<CustomActionRef Id="GetConfigProperties" />