0
MSI의 레지스트리 테이블에서 값을 변경해야합니다. Msi는 WIX로 제작되었습니다. C++에서이 작업을 수행해야합니다. Registry.Name : 세션 Registry.Value : # 내가 값에 #이 값이 형식을 나타냅니다과를 것을 이해 250msi 레지스트리 테이블의 값을 REG_DWORD로 업데이트하는 방법
여기
는 값이 시작 (ORCA)는 무엇인가 정수 (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