2016-12-22 3 views
0

Мне нужно изменить значение в таблице реестра MSI. Msi построен с WIX. Мне нужно сделать это на C++.Как обновить значение в таблице реестра msi как REG_DWORD

Вот что значение, чтобы начать (ORCA): Registry.Name: Session Registry.Value: # 250

Я понимаю, что # в значение указывает, что значение отформатирована и является целое число (REG_DWORD)

Я попытался это с помощью простого MsiViewExecute():

MSIHANDLE MsiHandle; 
MSIHANDLE ViewHandle=(MSIHANDLE)NULL; 

MsiOpenDatabase(MsiFullPath,MSIDBOPEN_TRANSACT,&MsiHandle); 

// This Will Update The Value Of Session To 70 But It Is A String Value (No Longer An Integer/REG_DWORD). 
// The Value Ends Up In The registry Table A '70' (No #). 
//MsiDatabaseOpenView(MsiHandle,L"UPDATE Registry SET Registry.Value=70 WHERE (Registry.Name='Session'),&ViewHandle); 

// https://msdn.microsoft.com/en-us/library/windows/desktop/aa371168(v=vs.85).aspx 
// Says: # The value is interpreted and stored as an integer (REG_DWORD). 
// Msi Does Not Like The #. This Returns ERROR_BAD_QUERY_SYNTAX 
MsiDatabaseOpenView(MsiHandle,L"UPDATE Registry SET Registry.Value=#70 WHERE (Registry.Name='Session'),&ViewHandle); 

MsiViewExecute(ViewHandle,(MSIHANDLE)NULL) 

Что я делаю неправильно?

+0

Возможно, это поможет сообщить о результатах вызовов API. Вызов MsiGetLastErrorRecord также может быть полезен. – PhilDW

+0

Как указано MsiDatabaseOpenView() возвращает ERROR_BAD_QUERY_SYNTAX – RSullivan

ответ

2

Ошибка вызвана # 70 - ей нужно одинарное цитирование. Поле в таблице отформатировано, поэтому это текст.

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

  • Нет связанных вопросов^_^