2016-12-22 16 views
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) 

?

+0

아마도 API 호출 결과를보고하는 데 도움이됩니다. MsiGetLastErrorRecord를 호출하는 것도 유용 할 수 있습니다. – PhilDW

+0

명시된 바와 같이 MsiDatabaseOpenView()는 ERROR_BAD_QUERY_SYNTAX를 반환합니다. – RSullivan

답변

2

오류는 # 70에 의해 발생합니다. 작은 따옴표가 필요합니다. 테이블의 필드는 서식이 지정되어 있으므로 텍스트입니다.