Мне нужно изменить значение в таблице реестра 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)
Что я делаю неправильно?
Возможно, это поможет сообщить о результатах вызовов API. Вызов MsiGetLastErrorRecord также может быть полезен. – PhilDW
Как указано MsiDatabaseOpenView() возвращает ERROR_BAD_QUERY_SYNTAX – RSullivan