2012-02-12 48 views
3

我正在使用Wix安装应用程序&服务,并且我想更改msi表(session.database)中的值。如何将值插入msi表

我试图用自定义操作来做到这一点,我可以使用select语句从表中选择值,但是如果我尝试插入,则安装失败。

我的代码:

[CustomAction] 
public static ActionResult MyCustomAction1(Session session) 
{ 
    ServiceController serviceController = new ServiceController(serviceName); 

    //-----Works fine----- 
    res=session.Database.ExecuteIntegerQuery("select ServiceType from ServiceInstall where StartType=4"); 

    //----Makes the setup fail 
    session.Database.Execute("insert into ServiceInstall (ServiceInstall) values ('a')");  
    return ActionResult.Success; 
    } 

是否可以插入自定义动作值?

感谢


谢谢”我已经试过这样: session.Database.Execute( “插入ServiceInstall(名称)VALUES( 'EZM')临时”);

但我得到以下异常: 异常:执行期间功能失败。数据库:表更新失败。

回答

0

您只能在安装时将临时数据插入MSI数据库。这里有一个特殊的语法 - INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]。请注意最后一个字 - 尽管它是可选的,但如果您尝试从自定义操作插入数据,它必须存在。

+0

谢谢'我试过这个:session.Database.Execute(“insert into ServiceInstall(Name)values('ezm')TEMPORARY”); 但我得到以下异常:例外:执行期间功能失败。数据库:表更新失败。 – user1192369 2012-02-13 07:01:00

+0

确保您指定了ServiceInstall表的所有必填字段 – 2012-02-13 08:47:42