2011-09-14 112 views
1

有誰知道在什麼時候該對象仍然可用?Wix會話對象

我想創建稱爲follws自定義操作:向下

  <Control Id="Test_Button" Type="PushButton" X="100" Y="100" Width="56" Height="17" Text="Test"> 
      <Publish Event="DoAction" Value="TestDatabaseConnection.SetProperties">1</Publish> 
      <Publish Event="DoAction" Value="TestDatabaseConnection">1</Publish> 
      </Control> 

我還定義

<CustomAction Id="TestDatabaseConnection.SetProperties" Property="TestDatabaseConnection" Value="CONNECTIONPROVIDER=[CONNECTIONPROVIDERNAME];PRIMARY_SERVER=[SERVER];PRIMARY_USERID=[USERID];PRIMARY_PASSWORD=[PASSWORD];"/> 
<CustomAction Id="TestDatabaseConnection" BinaryKey="WixCustomActions" DllEntry="TestDatabaseConnection"/> 

但我不斷收到錯誤的自定義操作,並當我嘗試並檢索設置的參數。

I.e.

server = session.CustomActionData["PRIMARY_SERVER"]; 

熱潮它炸燬

Action ended 13:11:46: TestDatabaseConnection. Return value 3. 
DEBUG: Error 2896: Executing action TestDatabaseConnection failed. 
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: TestDatabaseConnection, , 

當在執行週期結束時把這個代碼的工作,但現在我想將它當按下按鈕。

任何線索?

+0

我發現以下幾點: http://goo.gl/gc9Az 「只有推遲,回滾和提交操作使用CustomActionData設置 從匹配屬性的值。立即行動(所有用戶界面行動 立即)擁有完全訪問屬性,所以這是不必要的 和未使用。 ' 我已經證實,當我刪除CustomActionData時,並沒有發生崩潰,但是我之前曾經通過[]直接訪問會話,並且默認情況下處理得更好,並且您只是得到一個空字符串,因爲您無法使用session.log它非常難以調試! 結論;它不起作用,但它不會崩潰了。 –

+0

好吧,我放棄了試圖傳遞使用屬性,並指的是實際變量;我只是試圖使用這些屬性來保持一致性。 –

回答

3

您只需通過CustomActionData類爲延期CA序列化和反序列化屬性。 Immeadiate Ca's(就像從DoAction控件事件中調用時)不需要這樣,它將不起作用。

+0

因此總的來說,不能使用SetProperties來執行「立即」操作,例如僅用於延遲的按鈕。 –

+2

如果您還沒有閱讀,請給予您一個很好的閱讀:http://www.installsite.org/pages/en/isnews/200108/index.htm –