This is an automated email from the ASF dual-hosted git repository.
ardovm pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/trunk by this push:
new a2971faee6 Avoid static linking
a2971faee6 is described below
commit a2971faee62b678751866b8308f86df85c7eacbd
Author: Arrigo Marchiori <[email protected]>
AuthorDate: Sat Feb 7 08:42:33 2026 +0100
Avoid static linking
Ensure we use MSI from the current host, rather than the build system's.
---
main/desktop/win32/source/setup/aoo_msi.cxx | 239 ++++++++++++++++++++++++++++
main/desktop/win32/source/setup/aoo_msi.hxx | 64 ++++++++
main/desktop/win32/source/setup/makefile.mk | 4 +-
main/desktop/win32/source/setup/setup.cpp | 148 ++++-------------
4 files changed, 334 insertions(+), 121 deletions(-)
diff --git a/main/desktop/win32/source/setup/aoo_msi.cxx
b/main/desktop/win32/source/setup/aoo_msi.cxx
new file mode 100755
index 0000000000..35fa59b4bc
--- /dev/null
+++ b/main/desktop/win32/source/setup/aoo_msi.cxx
@@ -0,0 +1,239 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#define UNICODE 1
+#define _UNICODE 1
+
+#include "aoo_msi.hxx"
+
+#include <strsafe.h>
+
+/// Handle to MSI.DLL
+static HMODULE hMsi = NULL;
+
+
+TCHAR *getInstallerLocation( void )
+{
+ static const TCHAR sInstKey[] = TEXT(
"Software\\Microsoft\\Windows\\CurrentVersion\\Installer" );
+ static const TCHAR sInstLocValue[] = TEXT( "InstallerLocation" );
+
+ HKEY hInstKey = NULL;
+ TCHAR *sMsiFolder = new TCHAR[ MAX_PATH + 1 ];
+ sMsiFolder[0] = '\0';
+
+ // find registered location of Msi.dll
+ if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, sInstKey, 0,
KEY_READ, &hInstKey ) )
+ {
+ long nRet = ERROR_SUCCESS;
+ DWORD dwMsiFolderSize = MAX_PATH + 1;
+ DWORD dwType = 0;
+
+ if ( ERROR_MORE_DATA == ( nRet = RegQueryValueEx( hInstKey,
sInstLocValue, NULL,
+ &dwType,
(BYTE*)sMsiFolder, &dwMsiFolderSize ) ) )
+ {
+ // try again with larger buffer
+ delete [] sMsiFolder;
+ sMsiFolder = new TCHAR[ dwMsiFolderSize ];
+ nRet = RegQueryValueEx( hInstKey, sInstLocValue, NULL, &dwType,
+ (BYTE*)sMsiFolder, &dwMsiFolderSize );
+ }
+
+ if ( ( ERROR_SUCCESS == nRet) &&
+ ( dwType == REG_SZ ) && ( dwMsiFolderSize ) ) {
+ // Make sure the string is null-terminated
+ sMsiFolder[dwMsiFolderSize / sizeof ( TCHAR ) + 1] = 0;
+ } else {
+ sMsiFolder[0] = '\0';
+ }
+ }
+ return sMsiFolder;
+}
+
+/** Load MSI.DLL and a symbol from it
+ *
+ * @return the requested symbol, or NULL in case of error.
+ */
+static FARPROC aoo_msi_load( LPCSTR lpProcName )
+{
+ static const TCHAR sMsiDll[] = TEXT( "\\msi.dll" );
+ if ( !hMsi ) // use the default location
+ {
+ TCHAR *sInstallerLocation = getInstallerLocation();
+ if ( sInstallerLocation[0] )
+ {
+ // load Msi.dll from registered location
+ int nLength = lstrlen( sMsiDll ) + lstrlen( sInstallerLocation ) +
1; // use StringCchLength ?
+ TCHAR *pMsiLocation = new TCHAR[ nLength ];
+
+ if ( SUCCEEDED( StringCchCopy( pMsiLocation, nLength,
sInstallerLocation ) ) &&
+ SUCCEEDED( StringCchCat( pMsiLocation, nLength, sMsiDll ) ) )
+ {
+ hMsi = LoadLibrary( pMsiLocation );
+ }
+ delete[] pMsiLocation;
+ }
+ delete[] sInstallerLocation;
+ }
+ if ( !hMsi )
+ {
+ return NULL;
+ }
+ return GetProcAddress( hMsi, lpProcName );
+}
+
+
+typedef HRESULT (CALLBACK* PFnDllGetVersion)( DLLVERSIONINFO *pdvi );
+HRESULT aoo_MsiDllGetVersion( DLLVERSIONINFO *pdvi ) {
+ static PFnDllGetVersion f = NULL;
+ if ( f == NULL )
+ f = (PFnDllGetVersion) aoo_msi_load( "DllGetVersion" );
+ if ( f == NULL )
+ return HRESULT_FROM_WIN32( GetLastError() );
+ return f( pdvi );
+}
+
+typedef UINT (WINAPI* PFnMsiGetPatchInfo)( LPCTSTR szPatch,
+ LPCTSTR szAttribute,
+ LPTSTR lpValueBuf,
+ LPDWORD pcchValueBuf );
+UINT WINAPI aoo_MsiGetPatchInfo( LPCTSTR szPatch,
+ LPCTSTR szAttribute,
+ LPTSTR lpValueBuf,
+ LPDWORD pcchValueBuf )
+{
+ static PFnMsiGetPatchInfo f = NULL;
+ if ( f == NULL )
+ {
+#ifdef UNICODE
+ f = (PFnMsiGetPatchInfo) aoo_msi_load( "MsiGetPatchInfoW" );
+#else
+ f = (PFnMsiGetPatchInfo) aoo_msi_load( "MsiGetPatchInfoA" );
+#endif
+ }
+ if ( !f )
+ {
+ return ERROR_BAD_CONFIGURATION;
+ }
+ return f( szPatch, szAttribute, lpValueBuf, pcchValueBuf );
+}
+
+typedef UINT (WINAPI* PFnMsiGetSummaryInformation)( MSIHANDLE hDatabase,
+ LPCTSTR szDatabasePath,
+ UINT uiUpdateCount,
+ MSIHANDLE *phSummaryInfo );
+UINT WINAPI aoo_MsiGetSummaryInformation( MSIHANDLE hDatabase,
+ LPCTSTR szDatabasePath,
+ UINT uiUpdateCount,
+ MSIHANDLE *phSummaryInfo )
+{
+ static PFnMsiGetSummaryInformation f = NULL;
+ if ( f == NULL )
+ {
+#ifdef UNICODE
+ f = (PFnMsiGetSummaryInformation) aoo_msi_load(
"MsiGetSummaryInformationW" );
+#else
+ f = (PFnMsiGetSummaryInformation) aoo_msi_load(
"MsiGetSummaryInformationA" );
+#endif
+ }
+ if ( f == NULL )
+ {
+ return ERROR_BAD_CONFIGURATION;
+ }
+ return f( hDatabase, szDatabasePath, uiUpdateCount, phSummaryInfo );
+}
+
+typedef INSTALLSTATE (WINAPI* PFnMsiQueryProductState)( LPCTSTR szProduct );
+INSTALLSTATE WINAPI aoo_MsiQueryProductState( LPCTSTR szProduct )
+{
+ static PFnMsiQueryProductState f = NULL;
+ if ( f == NULL )
+ {
+#ifdef UNICODE
+ f = (PFnMsiQueryProductState) aoo_msi_load( "MsiQueryProductStateW" );
+#else
+ f = (PFnMsiQueryProductState) aoo_msi_load( "MsiQueryProductStateA" );
+#endif
+ }
+ if ( f == NULL )
+ {
+ return INSTALLSTATE_INVALIDARG;
+ }
+ return f( szProduct );
+}
+
+typedef UINT (WINAPI* PFnMsiSummaryInfoGetProperty)( MSIHANDLE hSummaryInfo,
+ UINT uiProperty,
+ PUINT puiDataType,
+ LPINT piValue,
+ FILETIME *pftValue,
+ LPTSTR szValueBuf,
+ LPDWORD pcchValueBuf );
+UINT WINAPI aoo_MsiSummaryInfoGetProperty( MSIHANDLE hSummaryInfo,
+ UINT uiProperty,
+ PUINT puiDataType,
+ LPINT piValue,
+ FILETIME *pftValue,
+ LPTSTR szValueBuf,
+ LPDWORD pcchValueBuf )
+{
+ static PFnMsiSummaryInfoGetProperty f = NULL;
+ if ( f == NULL )
+ {
+#ifdef UNICODE
+ f = (PFnMsiSummaryInfoGetProperty) aoo_msi_load(
"MsSummaryInfoGetPropertyW" );
+#else
+ f = (PFnMsiSummaryInfoGetProperty) aoo_msi_load(
"MsSummaryInfoGetPropertyA" );
+#endif
+ }
+ if ( f == NULL )
+ {
+ return ERROR_INVALID_FUNCTION;
+ }
+ return f( hSummaryInfo, uiProperty, puiDataType, piValue, pftValue,
+ szValueBuf, pcchValueBuf );
+}
+
+
+typedef UINT (WINAPI *PFnMsiCloseHandle)( MSIHANDLE hAny );
+UINT WINAPI aoo_MsiCloseHandle( MSIHANDLE hAny )
+{
+ static PFnMsiCloseHandle f = NULL;
+ if ( f == NULL )
+ {
+ f = (PFnMsiCloseHandle) aoo_msi_load( "MsiCloseHandle" );
+ }
+ if ( f == NULL )
+ {
+ return ERROR_INVALID_FUNCTION;
+ }
+ return f( hAny );
+}
+
+/*
+ * MsiCloseHandle() must be defined because it is required by the
+ * destructor of class PMSIHANDLE, defined in Msi.h.
+ */
+extern "C" {
+ UINT WINAPI MsiCloseHandle( MSIHANDLE hAny )
+ {
+ return aoo_MsiCloseHandle( hAny );
+ }
+}
diff --git a/main/desktop/win32/source/setup/aoo_msi.hxx
b/main/desktop/win32/source/setup/aoo_msi.hxx
new file mode 100755
index 0000000000..9fdf3d3a95
--- /dev/null
+++ b/main/desktop/win32/source/setup/aoo_msi.hxx
@@ -0,0 +1,64 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef AOO_MSI_H
+#define AOO_MSI_H
+
+#if defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#include <windows.h>
+#if defined _MSC_VER
+#pragma warning(pop)
+#endif
+#include <shlwapi.h>
+#include <msi.h>
+
+/** Load the "Installer location" from the Windows registry.
+ *
+ * @return an array allocated with new[] of at least MAX_PATH + 1
+ * elements. The string length will be zero in case of error.
+ */
+TCHAR *getInstallerLocation( void );
+
+HRESULT aoo_MsiDllGetVersion( DLLVERSIONINFO *pdvi );
+
+UINT WINAPI aoo_MsiGetPatchInfo( LPCTSTR szPatch,
+ LPCTSTR szAttribute,
+ LPTSTR lpValueBuf,
+ LPDWORD pcchValueBuf );
+
+UINT WINAPI aoo_MsiGetSummaryInformation( MSIHANDLE hDatabase,
+ LPCTSTR szDatabasePath,
+ UINT uiUpdateCount,
+ MSIHANDLE *phSummaryInfo );
+
+INSTALLSTATE WINAPI aoo_MsiQueryProductState( LPCTSTR szProduct );
+
+UINT WINAPI aoo_MsiSummaryInfoGetProperty( MSIHANDLE hSummaryInfo,
+ UINT uiProperty,
+ PUINT puiDataType,
+ LPINT piValue,
+ FILETIME *pftValue,
+ LPTSTR szValueBuf,
+ LPDWORD pcchValueBuf );
+
+#endif // defined AOO_MSI_H
diff --git a/main/desktop/win32/source/setup/makefile.mk
b/main/desktop/win32/source/setup/makefile.mk
index 042bf765e6..35dce7f533 100644
--- a/main/desktop/win32/source/setup/makefile.mk
+++ b/main/desktop/win32/source/setup/makefile.mk
@@ -54,7 +54,7 @@ ULFDIR:=.
.ENDIF # "$(WITH_LANG)"!=""
OBJFILES= $(OBJ)$/setup_main.obj \
- $(OBJ)$/setup.obj
+ $(OBJ)$/setup.obj $(OBJ)$/aoo_msi.obj
# --- Targets ------------------------------------------------------
# Generate the native Windows resource file
@@ -66,7 +66,7 @@ LIBSALCPPRT= $(0)
APP1NOSAL= TRUE
APP1TARGET= loader2
-APP1STDLIBS= $(GDI32LIB) $(ADVAPI32LIB) $(SHELL32LIB) $(MSILIB)
+APP1STDLIBS= $(GDI32LIB) $(ADVAPI32LIB) $(SHELL32LIB)
.IF "$(COM)"!="GCC"
APP1STDLIBS+= libcmt.lib
.ENDIF
diff --git a/main/desktop/win32/source/setup/setup.cpp
b/main/desktop/win32/source/setup/setup.cpp
index b35dd99615..d1be11df41 100644
--- a/main/desktop/win32/source/setup/setup.cpp
+++ b/main/desktop/win32/source/setup/setup.cpp
@@ -46,6 +46,7 @@
#include "strsafe.h"
#include "setup.hxx"
+#include "aoo_msi.hxx"
#include "resource.h"
@@ -79,7 +80,6 @@
#define CMDLN_REG_ALL_MSO_TYPES TEXT( "msoreg=1" )
#define CMDLN_REG_NO_MSO_TYPES TEXT( "msoreg=0" )
-#define MSI_DLL TEXT( "msi.dll" )
#define ADVAPI32_DLL TEXT( "advapi32.dll" )
#define PROFILE_NAME TEXT( "setup.ini" )
@@ -90,10 +90,8 @@
// Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161
#define PRODUCTCODE_X64 TEXT( "{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}" )
-#define MSIAPI_DllGetVersion "DllGetVersion"
#define ADVAPI32API_CheckTokenMembership "CheckTokenMembership"
-typedef HRESULT (CALLBACK* PFnDllGetVersion)( DLLVERSIONINFO *pdvi);
typedef BOOL (WINAPI* PFnCheckTokenMembership)(HANDLE TokenHandle, PSID
SidToCheck, PBOOL IsMember);
#ifdef DEBUG
@@ -114,9 +112,6 @@ static inline void OutputDebugStringFormat( LPCTSTR, ... )
//--------------------------------------------------------------------------
-const TCHAR sInstKey[] = TEXT(
"Software\\Microsoft\\Windows\\CurrentVersion\\Installer" );
-const TCHAR sInstLocValue[] = TEXT( "InstallerLocation" );
-const TCHAR sMsiDll[] = TEXT( "\\msi.dll" );
const TCHAR sMsiExe[] = TEXT( "\\msiexec.exe" );
const TCHAR sDelayReboot[] = TEXT( " /c:\"msiinst /delayreboot\"" );
const TCHAR sMsiQuiet[] = TEXT( " /q" );
@@ -718,84 +713,15 @@ boolean SetupApp::ChooseLanguage( long& rLanguage )
return true;
}
-//--------------------------------------------------------------------------
-HMODULE SetupApp::LoadMsiLibrary()
-{
- HMODULE hMsi = NULL;
- HKEY hInstKey = NULL;
-
- // find registered location of Msi.dll
- if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, sInstKey, 0,
KEY_READ, &hInstKey ) )
- {
- long nRet = ERROR_SUCCESS;
- TCHAR *sMsiFolder = new TCHAR[ MAX_PATH + 1 ];
- DWORD dwMsiFolderSize = MAX_PATH + 1;
- DWORD dwType = 0;
-
- if ( ERROR_MORE_DATA == ( nRet = RegQueryValueEx( hInstKey,
sInstLocValue, NULL,
- &dwType,
(BYTE*)sMsiFolder, &dwMsiFolderSize ) ) )
- {
- // try again with larger buffer
- delete [] sMsiFolder;
- sMsiFolder = new TCHAR[ dwMsiFolderSize ];
-
- nRet = RegQueryValueEx( hInstKey, sInstLocValue, NULL, &dwType,
- (BYTE*)sMsiFolder, &dwMsiFolderSize );
- }
-
- if ( ERROR_SUCCESS == nRet && dwType == REG_SZ && dwMsiFolderSize > 0 )
- {
- // load Msi.dll from registered location
- int nLength = lstrlen( sMsiDll ) + dwMsiFolderSize + 1; // use
StringCchLength ?
- TCHAR *pMsiLocation = new TCHAR[ nLength ];
-
- if ( SUCCEEDED( StringCchCopy( pMsiLocation, nLength, sMsiFolder )
) &&
- SUCCEEDED( StringCchCat( pMsiLocation, nLength, sMsiDll ) ) )
- {
- hMsi = LoadLibrary( pMsiLocation );
- }
- }
- }
-
- if ( !hMsi ) // use the default location
- {
- hMsi = LoadLibrary( sMsiDll );
- }
-
- return hMsi;
-}
//--------------------------------------------------------------------------
LPCTSTR SetupApp::GetPathToMSI()
{
LPTSTR sMsiPath = NULL;
HKEY hInstKey = NULL;
- TCHAR *sMsiFolder = new TCHAR[ MAX_PATH + 1 ];
+ TCHAR *sMsiFolder = getInstallerLocation();
DWORD nMsiFolderSize = MAX_PATH + 1;
- sMsiFolder[0] = '\0';
-
- // find registered location of Msi.dll
- if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, sInstKey, 0,
KEY_READ, &hInstKey ) )
- {
- LONG nRet = ERROR_SUCCESS;
- DWORD dwType = 0;
-
- if ( ERROR_MORE_DATA == ( nRet = RegQueryValueEx( hInstKey,
sInstLocValue, NULL,
- &dwType,
(BYTE*)sMsiFolder, &nMsiFolderSize ) ) )
- {
- // try again with larger buffer
- delete [] sMsiFolder;
- sMsiFolder = new TCHAR[ nMsiFolderSize ];
-
- nRet = RegQueryValueEx( hInstKey, sInstLocValue, NULL, &dwType,
- (BYTE*)sMsiFolder, &nMsiFolderSize );
- }
-
- if ( ERROR_SUCCESS != nRet || dwType != REG_SZ || nMsiFolderSize == 0 )
- sMsiFolder[0] = '\0';
- }
-
if ( sMsiFolder[0] == '\0' ) // use the default location
{
Log( TEXT( " Could not find path to msiexec.exe in registry" ) );
@@ -1174,50 +1100,34 @@ void SetupApp::GetLanguageName( long nLanguage, LPTSTR
sName ) const
boolean SetupApp::CheckVersion()
{
boolean bRet = false;
- HMODULE hMsi = LoadMsiLibrary();
Log( TEXT( " Looking for installed MSI with version >= %s\r\n" ),
m_pReqVersion );
- if ( !hMsi )
- {
- Log( TEXT( "Error: No MSI found!\r\n" ) );
- SetError( (UINT) ERROR_SETUP_NOT_FOUND );
- }
- else
- {
- PFnDllGetVersion pDllGetVersion = (PFnDllGetVersion) GetProcAddress(
hMsi, MSIAPI_DllGetVersion );
+ DLLVERSIONINFO aInfo;
- if ( pDllGetVersion )
+ aInfo.cbSize = sizeof( DLLVERSIONINFO );
+ if ( NOERROR == aoo_MsiDllGetVersion( &aInfo ) )
+ {
+ TCHAR pMsiVersion[ VERSION_SIZE ];
+ StringCchPrintf( pMsiVersion, VERSION_SIZE, TEXT("%d.%d.%4d"),
+ aInfo.dwMajorVersion,
+ aInfo.dwMinorVersion,
+ aInfo.dwBuildNumber );
+ if ( _tcsncmp( pMsiVersion, m_pReqVersion, _tcslen( pMsiVersion ) ) < 0
)
{
- DLLVERSIONINFO aInfo;
-
- aInfo.cbSize = sizeof( DLLVERSIONINFO );
- if ( NOERROR == pDllGetVersion( &aInfo ) )
- {
- TCHAR pMsiVersion[ VERSION_SIZE ];
- StringCchPrintf( pMsiVersion, VERSION_SIZE, TEXT("%d.%d.%4d"),
- aInfo.dwMajorVersion,
- aInfo.dwMinorVersion,
- aInfo.dwBuildNumber );
- if ( _tcsncmp( pMsiVersion, m_pReqVersion, _tcslen(
pMsiVersion ) ) < 0 )
- {
- StringCchCopy( m_pErrorText, MAX_TEXT_LENGTH, pMsiVersion
);
- SetError( (UINT) ERROR_SETUP_TO_OLD );
- Log( TEXT( "Warning: Old MSI version found <%s>, update
needed!\r\n" ), pMsiVersion );
- }
- else
- {
- Log( TEXT( " Found MSI version <%s>, no update needed\r\n"
), pMsiVersion );
- bRet = true;
- }
- if ( aInfo.dwMajorVersion >= 3 )
- m_bSupportsPatch = true;
- else
- Log( TEXT("Warning: Patching not supported! MSI-Version
<%s>\r\n"), pMsiVersion );
- }
- }
-
- FreeLibrary( hMsi );
+ StringCchCopy( m_pErrorText, MAX_TEXT_LENGTH, pMsiVersion );
+ SetError( (UINT) ERROR_SETUP_TO_OLD );
+ Log( TEXT( "Warning: Old MSI version found <%s>, update
needed!\r\n" ), pMsiVersion );
+ }
+ else
+ {
+ Log( TEXT( " Found MSI version <%s>, no update needed\r\n" ),
pMsiVersion );
+ bRet = true;
+ }
+ if ( aInfo.dwMajorVersion >= 3 )
+ m_bSupportsPatch = true;
+ else
+ Log( TEXT("Warning: Patching not supported! MSI-Version <%s>\r\n"),
pMsiVersion );
}
return bRet;
@@ -1872,7 +1782,7 @@ boolean SetupApp::IsPatchInstalled( TCHAR* pBaseDir,
TCHAR* pFileName )
StringCchCopy( szDatabasePath, nLen, pBaseDir );
StringCchCat( szDatabasePath, nLen, pFileName );
- UINT nRet = MsiGetSummaryInformation( NULL, szDatabasePath, 0,
&hSummaryInfo );
+ UINT nRet = aoo_MsiGetSummaryInformation( NULL, szDatabasePath, 0,
&hSummaryInfo );
if ( nRet != ERROR_SUCCESS )
{
@@ -1884,7 +1794,7 @@ boolean SetupApp::IsPatchInstalled( TCHAR* pBaseDir,
TCHAR* pFileName )
UINT uiDataType;
LPTSTR szPatchID = new TCHAR[ 64 ];
DWORD cchValueBuf = 64;
- nRet = MsiSummaryInfoGetProperty( hSummaryInfo, PID_REVNUMBER,
&uiDataType, NULL, NULL, szPatchID, &cchValueBuf );
+ nRet = aoo_MsiSummaryInfoGetProperty( hSummaryInfo, PID_REVNUMBER,
&uiDataType, NULL, NULL, szPatchID, &cchValueBuf );
if ( nRet != ERROR_SUCCESS )
{
@@ -1893,7 +1803,7 @@ boolean SetupApp::IsPatchInstalled( TCHAR* pBaseDir,
TCHAR* pFileName )
return false;
}
- nRet = MsiGetPatchInfo( szPatchID, INSTALLPROPERTY_LOCALPACKAGE, NULL,
NULL );
+ nRet = aoo_MsiGetPatchInfo( szPatchID, INSTALLPROPERTY_LOCALPACKAGE,
NULL, NULL );
StringCchPrintf( sBuf, 80, TEXT(" GetPatchInfo for (%s) returned
(%u)\r\n"), szPatchID, nRet );
Log( sBuf );
@@ -1918,7 +1828,7 @@ boolean SetupApp::IsPatchInstalled( TCHAR* pBaseDir,
TCHAR* pFileName )
//--------------------------------------------------------------------------
boolean SetupApp::InstallRuntimes( TCHAR *sProductCode, TCHAR *sRuntimePath )
{
- INSTALLSTATE nRet = MsiQueryProductState( sProductCode );
+ INSTALLSTATE nRet = aoo_MsiQueryProductState( sProductCode );
OutputDebugStringFormat( TEXT( "MsiQueryProductState returned <%d>\r\n" ),
nRet );
if ( nRet == INSTALLSTATE_DEFAULT )
return true;