2012-02-12 75 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