2011-09-14 84 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 –