2013-04-16 5 views
1

Я пытаюсь использовать произвольное действие Wix DTF для записи значений сеанса среды выполнения MSI в реестр. Этого я хотел достичь, добавив временную запись в таблицу «Реестр» в базе данных. Поскольку C++ имел способ WcaAddTempRecord для достижения этого, очень хотелось знать, есть ли какой-либо эквивалентный метод в DTF.Wix DTF Custom Action Эквивалент WcaAddTempRecord

Примечание: Я попытался использовать Session.Database.OpenView, чтобы вставить запись, но последовательно я получаю ошибку с ошибкой обновления из-за свойства readonly базы данных сеанса.

Может кто-нибудь предложить лучший подход для этой ситуации?

ответ

0

База данных MSI доступна только для чтения во время установки. Таким образом, вы не можете добавлять постоянные строки. Однако вы можете вставить временные строки. Как только вы получите View назад с Session.Database.OpenView(), используйте метод InsertTemporary() на объекте View, чтобы добавить временные строки.

Вот как WcaAddTempRecord() получает Temp от своего имени. :)

0

Это мой "перейти к" вспомогательный метод:

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(); 
} 

Для получения дополнительной информации см:

Dynamic Windows Installer UI

+0

Благодаря Роб и Крис. – user2286870

+0

Я пробовал использовать вышеописанный метод, но я получаю Ошибка обновления таблицы. Когда я добавил InsertTemporary непосредственно перед представлением, как показано ниже: View view = db.OpenView (sqlInsertSring); view.InsertTemporary (новая запись (6)); view.Execute (новая запись (объекты)); Я получаю базу данных:. Курсор в недействительном состоянии и не может продолжить. – user2286870

+0

Существует ли таблица? WiX имеет тенденцию выкидывать неиспользуемые таблицы при создании MSI. Вы можете использовать элемент EnsureTable, чтобы он не делал этого. Вы уверены, что вы передаете правильное количество и типы объектов? Я использовал этот метод в нескольких установках, и я не сомневаюсь, что он работает. –

Смежные вопросы