我正在嘗試使用Wix DTF自定義操作將MSI運行時會話值寫入註冊表。 這是我想通過添加臨時記錄到數據庫中的「註冊表」表。 由於C++有一個WcaAddTempRecord
方法來實現這一點,真的想知道DTF中是否有任何等價的方法。Wix DTF自定義操作等效WcaAddTempRecord
注意:我嘗試使用Session.Database.OpenView
插入記錄,但始終由於會話數據庫只讀屬性而出現更新失敗錯誤。
有人可以建議這種情況的最佳方法?
我正在嘗試使用Wix DTF自定義操作將MSI運行時會話值寫入註冊表。 這是我想通過添加臨時記錄到數據庫中的「註冊表」表。 由於C++有一個WcaAddTempRecord
方法來實現這一點,真的想知道DTF中是否有任何等價的方法。Wix DTF自定義操作等效WcaAddTempRecord
注意:我嘗試使用Session.Database.OpenView
插入記錄,但始終由於會話數據庫只讀屬性而出現更新失敗錯誤。
有人可以建議這種情況的最佳方法?
MSI數據庫在安裝過程中是隻讀的。所以你不能添加永久行。但是,您可以插入臨時行。一旦從Session.Database.OpenView()
得到View
,然後使用View
對象上的InsertTemporary()
方法添加臨時行。
這就是WcaAddTempRecord()
以其名稱獲得Temp的方式。 :)
這是我 「去」 的輔助方法:
private static void InsertTempRecord(Session session, string tableName, Object[] objects)
{
Database db = session.Database;
string sqlInsertSring = db.Tables[tableName].SqlInsertString + " TEMPORARY";
session.Log("SqlInsertString is {0}", sqlInsertSring);
View view = db.OpenView(sqlInsertSring);
view.Execute(new Record(objects));
view.Close();
}
欲瞭解更多信息,請參閱:
感謝羅布和克里斯。 – user2286870
我試過使用上面的方法,但我得到表更新失敗錯誤。當我添加InsertTemporary之前視圖執行如下View view = db.OpenView(sqlInsertSring); view.InsertTemporary(new Record(6)); view.Execute(new Record(objects));我得到數據庫:。遊標處於無效狀態,無法繼續。 – user2286870
表格是否存在? WiX在構建MSI時傾向於剔除未使用的表。您可以使用EnsureTable元素來指示它不要這樣做。你確定你傳遞了正確的數量和類型的對象嗎?我已經在很多安裝中使用了這種方法,並且毫無疑問我認爲它可以工作。 –