diff options
Diffstat (limited to 'setup_native/source/win32/customactions/quickstarter/quickstarter.cxx')
-rw-r--r-- | setup_native/source/win32/customactions/quickstarter/quickstarter.cxx | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/setup_native/source/win32/customactions/quickstarter/quickstarter.cxx b/setup_native/source/win32/customactions/quickstarter/quickstarter.cxx deleted file mode 100644 index 396b293d9..000000000 --- a/setup_native/source/win32/customactions/quickstarter/quickstarter.cxx +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include "quickstarter.hxx" -#ifdef _MSC_VER -#pragma warning(push, 1) /* disable warnings within system headers */ -#endif -#include <psapi.h> -#ifdef _MSC_VER -#pragma warning(pop) -#endif -#include <tlhelp32.h> -#include <malloc.h> - -std::string GetOfficeInstallationPath(MSIHANDLE handle) -{ - std::string progpath; - DWORD sz = 0; - LPTSTR dummy = TEXT(""); - - if (MsiGetProperty(handle, TEXT("INSTALLLOCATION"), dummy, &sz) == ERROR_MORE_DATA) - { - sz++; // space for the final '\0' - DWORD nbytes = sz * sizeof(TCHAR); - LPTSTR buff = reinterpret_cast<LPTSTR>(_alloca(nbytes)); - ZeroMemory(buff, nbytes); - MsiGetProperty(handle, TEXT("INSTALLLOCATION"), buff, &sz); - progpath = buff; - } - return progpath; -} - -std::string GetOfficeProductName(MSIHANDLE handle) -{ - std::string productname; - DWORD sz = 0; - LPTSTR dummy = TEXT(""); - - if (MsiGetProperty(handle, TEXT("ProductName"), dummy, &sz) == ERROR_MORE_DATA) - { - sz++; // space for the final '\0' - DWORD nbytes = sz * sizeof(TCHAR); - LPTSTR buff = reinterpret_cast<LPTSTR>(_alloca(nbytes)); - ZeroMemory(buff, nbytes); - MsiGetProperty(handle, TEXT("ProductName"), buff, &sz); - productname = buff; - } - return productname; -} - -std::string GetQuickstarterLinkName(MSIHANDLE handle) -{ - std::string quickstarterlinkname; - DWORD sz = 0; - LPTSTR dummy = TEXT(""); - - if (MsiGetProperty(handle, TEXT("Quickstarterlinkname"), dummy, &sz) == ERROR_MORE_DATA) - { - sz++; // space for the final '\0' - DWORD nbytes = sz * sizeof(TCHAR); - LPTSTR buff = reinterpret_cast<LPTSTR>(_alloca(nbytes)); - ZeroMemory(buff, nbytes); - MsiGetProperty(handle, TEXT("Quickstarterlinkname"), buff, &sz); - quickstarterlinkname = buff; - } - else if (MsiGetProperty(handle, TEXT("ProductName"), dummy, &sz) == ERROR_MORE_DATA) - { - sz++; // space for the final '\0' - DWORD nbytes = sz * sizeof(TCHAR); - LPTSTR buff = reinterpret_cast<LPTSTR>(_alloca(nbytes)); - ZeroMemory(buff, nbytes); - MsiGetProperty(handle, TEXT("ProductName"), buff, &sz); - quickstarterlinkname = buff; - } - return quickstarterlinkname; -} - -inline bool IsValidHandle( HANDLE handle ) -{ - return NULL != handle && INVALID_HANDLE_VALUE != handle; -} - - -static HANDLE WINAPI _CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ) -{ - typedef HANDLE (WINAPI *FN_PROC)( DWORD dwFlags, DWORD th32ProcessID ); - static FN_PROC lpProc = NULL; - - HANDLE hSnapshot = NULL; - - if ( !lpProc ) - { - HMODULE hLibrary = GetModuleHandle("KERNEL32.DLL"); - - if ( hLibrary ) - lpProc = reinterpret_cast< FN_PROC >(GetProcAddress( hLibrary, "CreateToolhelp32Snapshot" )); - } - - if ( lpProc ) - hSnapshot = lpProc( dwFlags, th32ProcessID ); - - return hSnapshot; -} - -static BOOL WINAPI _Process32First( HANDLE hSnapshot, PROCESSENTRY32 *lppe32 ) -{ - typedef BOOL (WINAPI *FN_PROC)( HANDLE hSnapshot, PROCESSENTRY32 *lppe32 ); - static FN_PROC lpProc = NULL; - - BOOL fSuccess = FALSE; - - if ( !lpProc ) - { - HMODULE hLibrary = GetModuleHandle("KERNEL32.DLL"); - - if ( hLibrary ) - lpProc = reinterpret_cast< FN_PROC >(GetProcAddress( hLibrary, "Process32First" )); - } - - if ( lpProc ) - fSuccess = lpProc( hSnapshot, lppe32 ); - - return fSuccess; -} - -static BOOL WINAPI _Process32Next( HANDLE hSnapshot, PROCESSENTRY32 *lppe32 ) -{ - typedef BOOL (WINAPI *FN_PROC)( HANDLE hSnapshot, PROCESSENTRY32 *lppe32 ); - static FN_PROC lpProc = NULL; - - BOOL fSuccess = FALSE; - - if ( !lpProc ) - { - HMODULE hLibrary = GetModuleHandle("KERNEL32.DLL"); - - if ( hLibrary ) - lpProc = reinterpret_cast< FN_PROC >(GetProcAddress( hLibrary, "Process32Next" )); - } - - if ( lpProc ) - fSuccess = lpProc( hSnapshot, lppe32 ); - - return fSuccess; -} - -static std::string GetProcessImagePath_9x( DWORD dwProcessId ) -{ - std::string sImagePath; - - HANDLE hSnapshot = _CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); - - if ( IsValidHandle( hSnapshot ) ) - { - PROCESSENTRY32 pe32 = { 0 }; - - pe32.dwSize = sizeof(PROCESSENTRY32); - - BOOL fSuccess = _Process32First( hSnapshot, &pe32 ); - bool found = false; - - while ( !found && fSuccess ) - { - if ( pe32.th32ProcessID == dwProcessId ) - { - found = true; - sImagePath = pe32.szExeFile; - } - - if ( !found ) - fSuccess = _Process32Next( hSnapshot, &pe32 ); - } - - CloseHandle( hSnapshot ); - } - - return sImagePath; -} - -static DWORD WINAPI _GetModuleFileNameExA( HANDLE hProcess, HMODULE hModule, LPSTR lpFileName, DWORD nSize ) -{ - typedef DWORD (WINAPI *FN_PROC)( HANDLE hProcess, HMODULE hModule, LPSTR lpFileName, DWORD nSize ); - - static FN_PROC lpProc = NULL; - - if ( !lpProc ) - { - HMODULE hLibrary = LoadLibrary("PSAPI.DLL"); - - if ( hLibrary ) - lpProc = reinterpret_cast< FN_PROC >(GetProcAddress( hLibrary, "GetModuleFileNameExA" )); - } - - if ( lpProc ) - return lpProc( hProcess, hModule, lpFileName, nSize ); - - return 0; - -} - -static std::string GetProcessImagePath_NT( DWORD dwProcessId ) -{ - std::string sImagePath; - - HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId ); - - if ( IsValidHandle( hProcess ) ) - { - CHAR szPathBuffer[MAX_PATH] = ""; - - if ( _GetModuleFileNameExA( hProcess, NULL, szPathBuffer, sizeof(szPathBuffer) ) ) - sImagePath = szPathBuffer; - - CloseHandle( hProcess ); - } - - return sImagePath; -} - -std::string GetProcessImagePath( DWORD dwProcessId ) -{ - return (LONG)GetVersion() < 0 ? GetProcessImagePath_9x( dwProcessId ) : GetProcessImagePath_NT( dwProcessId ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |