Visual c++ 如何将msi注册表表中的值更新为REG_DWORD

Visual c++ 如何将msi注册表表中的值更新为REG_DWORD,visual-c++,wix,windows-installer,wix3.5,Visual C++,Wix,Windows Installer,Wix3.5,我需要更改MSI注册表表中的值。 Msi是用WIX构建的。 我需要在C++中做这个。< /P> 以下是要开始的值(ORCA): 注册表。名称:会话 注册表。值:#250 我知道值中的#表示该值已格式化,是一个整数(REG_DWORD) 我已尝试使用一个简单的MsiViewExecute()执行此操作: 我做错了什么?错误是由#70引起的-它需要单引号。表中的字段已格式化,因此为文本 错误是由#70引起的-它需要单引号。表中的字段已格式化,因此为文本 报告API调用的结果可能会有所帮助。调用Msi

我需要更改MSI注册表表中的值。 Msi是用WIX构建的。 我需要在C++中做这个。< /P> 以下是要开始的值(ORCA): 注册表。名称:会话 注册表。值:#250

我知道值中的#表示该值已格式化,是一个整数(REG_DWORD)

我已尝试使用一个简单的MsiViewExecute()执行此操作:


我做错了什么?

错误是由#70引起的-它需要单引号。表中的字段已格式化,因此为文本

错误是由#70引起的-它需要单引号。表中的字段已格式化,因此为文本

报告API调用的结果可能会有所帮助。调用MsiGetLastErrorRecord也可能有用。如前所述,MsiDatabaseOpenView()返回错误\u BAD\u QUERY\u语法可能有助于报告API调用的结果。调用MsiGetLastErrorRecord也可能有用。如前所述,MsigetDatabaseOpenView()返回错误\u错误\u查询\u语法
 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)