diff options
Diffstat (limited to 'setup_native/source/win32/customactions/shellextensions/checkpatches.cxx')
-rw-r--r-- | setup_native/source/win32/customactions/shellextensions/checkpatches.cxx | 64 |
1 files changed, 12 insertions, 52 deletions
diff --git a/setup_native/source/win32/customactions/shellextensions/checkpatches.cxx b/setup_native/source/win32/customactions/shellextensions/checkpatches.cxx index 33ad29fab7e8..f8a28f7ad2f2 100644 --- a/setup_native/source/win32/customactions/shellextensions/checkpatches.cxx +++ b/setup_native/source/win32/customactions/shellextensions/checkpatches.cxx @@ -17,87 +17,47 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifdef _MSC_VER -#pragma warning(push, 1) /* disable warnings within system headers */ -#endif -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <msiquery.h> -#ifdef _MSC_VER -#pragma warning(pop) -#endif +#include "shlxtmsi.hxx" #include <malloc.h> #include <assert.h> -#ifdef UNICODE -#define _UNICODE -#define _tstring wstring -#else -#define _tstring string -#endif -#include <tchar.h> -#include <string> #include <queue> #include <stdio.h> #include <strsafe.h> #include <systools/win32/uwinapi.h> - #ifdef DEBUG -inline void OutputDebugStringFormat( LPCSTR pFormat, ... ) +inline void OutputDebugStringFormatW( PCWSTR pFormat, ... ) { - CHAR buffer[1024]; + WCHAR buffer[1024]; va_list args; va_start( args, pFormat ); - StringCchVPrintfA( buffer, sizeof(buffer), pFormat, args ); - OutputDebugStringA( buffer ); + StringCchVPrintfW( buffer, sizeof(buffer)/sizeof(buffer[0]), pFormat, args ); + OutputDebugStringW( buffer ); va_end(args); } #else -static inline void OutputDebugStringFormat( LPCSTR, ... ) +static inline void OutputDebugStringFormatW( PCWSTR, ... ) { } #endif -static std::_tstring GetMsiProperty( MSIHANDLE handle, const std::_tstring& sProperty ) -{ - std::_tstring result; - TCHAR szDummy[1] = TEXT(""); - DWORD nChars = 0; - - if ( MsiGetProperty( handle, sProperty.c_str(), szDummy, &nChars ) == ERROR_MORE_DATA ) - { - DWORD nBytes = ++nChars * sizeof(TCHAR); - LPTSTR buffer = reinterpret_cast<LPTSTR>(_alloca(nBytes)); - ZeroMemory( buffer, nBytes ); - MsiGetProperty(handle, sProperty.c_str(), buffer, &nChars); - result = buffer; - } - - return result; -} - -static void SetMsiProperty( MSIHANDLE handle, const std::_tstring& sProperty ) -{ - MsiSetProperty( handle, sProperty.c_str(), TEXT("1") ); -} - extern "C" UINT __stdcall CheckPatchList( MSIHANDLE handle ) { - std::_tstring sPatchList = GetMsiProperty( handle, TEXT("PATCH") ); - std::_tstring sRequiredPatch = GetMsiProperty( handle, TEXT("PREREQUIREDPATCH") ); + std::wstring sPatchList = GetMsiPropertyW( handle, L"PATCH" ); + std::wstring sRequiredPatch = GetMsiPropertyW( handle, L"PREREQUIREDPATCH" ); - OutputDebugStringFormat( "CheckPatchList called with PATCH=%s and PRQ= %s\n", sPatchList.c_str(), sRequiredPatch.c_str() ); + OutputDebugStringFormatW( L"CheckPatchList called with PATCH=%s and PRQ=%s\n", sPatchList.c_str(), sRequiredPatch.c_str() ); if ( ( sPatchList.length() != 0 ) && ( sRequiredPatch.length() != 0 ) ) { - if ( _tcsstr( sPatchList.c_str(), sRequiredPatch.c_str() ) ) + if ( wcsstr( sPatchList.c_str(), sRequiredPatch.c_str() ) ) { - SetMsiProperty( handle, TEXT("IGNOREPREREQUIREDPATCH") ); - OutputDebugStringFormat( "Set Property IgnorePrerequiredPatch!\n" ); + SetMsiPropertyW( handle, L"IGNOREPREREQUIREDPATCH", L"1" ); + OutputDebugStringFormatW( L"Set Property IgnorePrerequiredPatch!\n" ); } } return ERROR_SUCCESS; |