diff options
Diffstat (limited to 'setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx')
-rw-r--r-- | setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx | 71 |
1 files changed, 14 insertions, 57 deletions
diff --git a/setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx b/setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx index 1a4f4f01bdc5..ca6b0c5d5c56 100644 --- a/setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx +++ b/setup_native/source/win32/customactions/shellextensions/checkdirectory.cxx @@ -17,90 +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 <systools/win32/uwinapi.h> #include <../tools/seterror.hxx> -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 UnsetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty) -{ - MsiSetProperty(handle, sProperty.c_str(), NULL); -} - -static void SetMsiProperty(MSIHANDLE handle, const std::_tstring& sProperty, const std::_tstring&) -{ - MsiSetProperty(handle, sProperty.c_str(), TEXT("1")); -} - extern "C" UINT __stdcall CheckInstallDirectory(MSIHANDLE handle) { - std::_tstring sInstallPath = GetMsiProperty(handle, TEXT("INSTALLLOCATION")); - std::_tstring sOfficeHostnamePath = GetMsiProperty(handle, TEXT("OFFICEDIRHOSTNAME")); + std::wstring sInstallPath = GetMsiPropertyW(handle, L"INSTALLLOCATION"); + std::wstring sOfficeHostnamePath = GetMsiPropertyW(handle, L"OFFICEDIRHOSTNAME"); - // MessageBox(NULL, sInstallPath.c_str(), "DEBUG", MB_OK); + // MessageBoxW(NULL, sInstallPath.c_str(), L"DEBUG", MB_OK); // unsetting all properties - UnsetMsiProperty( handle, TEXT("DIRECTORY_NOT_EMPTY") ); + UnsetMsiPropertyW( handle, L"DIRECTORY_NOT_EMPTY" ); // 1. Searching for file setup.ini - std::_tstring sSetupIniPath = sInstallPath + sOfficeHostnamePath + TEXT("\\program\\setup.ini"); + std::wstring sSetupIniPath = sInstallPath + sOfficeHostnamePath + L"\\program\\setup.ini"; WIN32_FIND_DATA data; - HANDLE hdl = FindFirstFile(sSetupIniPath.c_str(), &data); + HANDLE hdl = FindFirstFileW(sSetupIniPath.c_str(), &data); - // std::_tstring mystr = "Searching for " + sSetupIniPath; - // MessageBox(NULL, mystr.c_str(), "DEBUG", MB_OK); + // std::wstring mystr = L"Searching for " + sSetupIniPath; + // MessageBoxW(NULL, mystr.c_str(), L"DEBUG", MB_OK); if ( IsValidHandle(hdl) ) { // setup.ini found -> directory cannot be used for installation. - SetMsiProperty( handle, TEXT("DIRECTORY_NOT_EMPTY"), TEXT("1") ); + SetMsiPropertyW( handle, L"DIRECTORY_NOT_EMPTY", L"1" ); SetMsiErrorCode( MSI_ERROR_DIRECTORY_NOT_EMPTY ); - // std::_tstring notEmptyStr = "Directory is not empty. Please choose another installation directory."; - // std::_tstring notEmptyTitle = "Directory not empty"; - // MessageBox(NULL, notEmptyStr.c_str(), notEmptyTitle.c_str(), MB_OK); + // std::wstring notEmptyStr = L"Directory is not empty. Please choose another installation directory."; + // std::wstring notEmptyTitle = L"Directory not empty"; + // MessageBoxW(NULL, notEmptyStr.c_str(), notEmptyTitle.c_str(), MB_OK); + FindClose(hdl); } return ERROR_SUCCESS; |