summaryrefslogtreecommitdiff
path: root/setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx')
-rw-r--r--setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx669
1 files changed, 0 insertions, 669 deletions
diff --git a/setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx b/setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx
deleted file mode 100644
index eac8217dd..000000000
--- a/setup_native/source/win32/customactions/reg4allmsdoc/reg4allmsi.cxx
+++ /dev/null
@@ -1,669 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#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 <malloc.h>
-#include <string>
-#include <strsafe.h>
-
-//----------------------------------------------------------
-static const CHAR* g_Extensions[] =
-{
- ".doc", // Microsoft Word Text [0]
- ".dot", // Microsoft Word Template
- ".rtf", // rtf text
- ".docx", // Office Word 2007 XML document
- ".docm", // Office Word 2007 XML macro-enabled document
- ".dotx", // Office Word 2007 XML template
- ".dotm", // Office Word 2007 XML macro-enabled template
- ".xlw", // Microsoft Excel
- ".xls", // Microsoft Excel
- ".xlt", // Microsoft Excel Template
- ".xlsx", // Office Excel 2007 XML workbook
- ".xlsm", // Office Excel 2007 XML macro-enabled workbook
- ".xltx", // Office Excel 2007 XML template
- ".xltm", // Office Excel 2007 XML macro-enabled template
- ".xlsb", // Office Excel 2007 binary workbook (BIFF12)
- ".ppt", // Microsoft Powerpoint
- ".pps", // Microsoft Powerpoint
- ".pot", // Microsoft Powerpoint Template
- ".pptx", // Office PowerPoint 2007 XML presentation
- ".pptm", // Office PowerPoint 2007 macro-enabled XML presentation
- ".potx", // Office PowerPoint 2007 XML template
- ".potm", // Office PowerPoint 2007 macro-enabled XML template
- ".ppsx", // Office PowerPoint 2007 XML show
- 0
-};
-
-static const int WORD_START = 0;
-static const int EXCEL_START = 7;
-static const int POWERPOINT_START = 15;
-static const int POWERPOINT_END = 23;
-
-// ".xlam", // Office Excel 2007 XML macro-enabled add-in
-// ".ppam", // Office PowerPoint 2007 macro-enabled XML add-in
-// ".ppsm", // Office PowerPoint 2007 macro-enabled XML show
-
-//----------------------------------------------------------
-#ifdef DEBUG
-inline void OutputDebugStringFormat( LPCSTR pFormat, ... )
-{
- CHAR buffer[1024];
- va_list args;
-
- va_start( args, pFormat );
- StringCchVPrintfA( buffer, sizeof(buffer), pFormat, args );
- OutputDebugStringA( buffer );
-}
-#else
-static inline void OutputDebugStringFormat( LPCSTR, ... )
-{
-}
-#endif
-
-//----------------------------------------------------------
-static BOOL CheckExtensionInRegistry( LPCSTR lpSubKey )
-{
- BOOL bRet = false;
- HKEY hKey = NULL;
- LONG lResult = RegOpenKeyExA( HKEY_CLASSES_ROOT, lpSubKey, 0, KEY_QUERY_VALUE, &hKey );
-
- if ( ERROR_SUCCESS == lResult )
- {
- CHAR szBuffer[1024];
- DWORD nSize = sizeof( szBuffer );
-
- lResult = RegQueryValueExA( hKey, "", NULL, NULL, (LPBYTE)szBuffer, &nSize );
- if ( ERROR_SUCCESS == lResult )
- {
- szBuffer[nSize] = '\0';
- OutputDebugStringFormat( "Found value [%s] for key [%s].\n", szBuffer, lpSubKey );
-
- if ( strncmp( szBuffer, "WordPad.Document.1", 18 ) == 0 )
- { // We will replace registration for word pad
- bRet = true;
- }
- else if ( strncmp( szBuffer, "OpenOffice.org.", 15 ) == 0 )
- { // We will replace registration for our own types, too
- bRet = true;
- }
- else if ( strncmp( szBuffer, "ooostub.", 8 ) == 0 )
- { // We will replace registration for ooostub, too
- bRet = true;
- }
- else
- {
- OutputDebugStringFormat( " Checking OpenWithList of [%s].\n", lpSubKey );
- HKEY hSubKey;
- lResult = RegOpenKeyExA( hKey, "OpenWithList", 0, KEY_ENUMERATE_SUB_KEYS, &hSubKey );
- if ( ERROR_SUCCESS == lResult )
- {
- DWORD nIndex = 0;
- while ( ERROR_SUCCESS == lResult )
- {
- nSize = sizeof( szBuffer );
- lResult = RegEnumKeyExA( hSubKey, nIndex++, szBuffer, &nSize, NULL, NULL, NULL, NULL );
- if ( ERROR_SUCCESS == lResult )
- {
- OutputDebugStringFormat( " Found value [%s] in OpenWithList of [%s].\n", szBuffer, lpSubKey );
- if ( strncmp( szBuffer, "WordPad.exe", 11 ) == 0 )
- { // We will replace registration for word pad
- bRet = true;
- }
- else if ( nSize > 0 )
- bRet = false;
- }
- }
- }
- else
- {
- OutputDebugStringFormat( " No OpenWithList found!\n" );
- }
- }
- }
- else // no default value found -> return TRUE to register for that key
- bRet = true;
-
- RegCloseKey( hKey );
- }
- else // no key found -> return TRUE to register for that key
- bRet = true;
-
- return bRet;
-}
-
-//----------------------------------------------------------
-static LONG DeleteSubKeyTree( HKEY RootKey, LPCSTR lpKey )
-{
- HKEY hKey;
- LONG rc = RegOpenKeyExA( RootKey, lpKey, 0, KEY_READ | DELETE, &hKey );
-
- if (ERROR_SUCCESS == rc)
- {
- LPCSTR lpSubKey;
- DWORD nMaxSubKeyLen;
-
- rc = RegQueryInfoKeyA( hKey, 0, 0, 0, 0, &nMaxSubKeyLen, 0, 0, 0, 0, 0, 0 );
- nMaxSubKeyLen++; // space for trailing '\0'
- lpSubKey = reinterpret_cast<CHAR*>( _alloca( nMaxSubKeyLen*sizeof(CHAR) ) );
-
- while (ERROR_SUCCESS == rc)
- {
- DWORD nLen = nMaxSubKeyLen;
- rc = RegEnumKeyExA( hKey, 0, (LPSTR)lpSubKey, &nLen, 0, 0, 0, 0); // always index zero
-
- if ( ERROR_NO_MORE_ITEMS == rc )
- {
- rc = RegDeleteKeyA( RootKey, lpKey );
- if ( rc == ERROR_SUCCESS )
- OutputDebugStringFormat( "deleted key [%s] from registry.\n", lpKey );
- else
- OutputDebugStringFormat( "RegDeleteKeyA %s returned %ld.\n", lpKey, rc );
- break;
- }
- else if ( rc == ERROR_SUCCESS )
- {
- rc = DeleteSubKeyTree( hKey, lpSubKey );
- if ( ERROR_SUCCESS != rc )
- OutputDebugStringFormat( "RegDeleteKeyA %s returned %ld.\n", lpSubKey, rc );
- }
-
- }
- RegCloseKey(hKey);
- }
- else
- {
- OutputDebugStringFormat( "RegOpenKeyExA %s returned %ld.\n", lpKey, rc );
- }
-
- return rc;
-}
-
-// Unused
-#if 0
-
-//----------------------------------------------------------
-static BOOL RemoveExtensionInRegistry( LPCSTR lpSubKey )
-{
- CHAR szBuffer[4096];
- DWORD nSize = sizeof( szBuffer );
- HKEY hKey = NULL;
- HKEY hSubKey = NULL;
- LONG lResult = RegOpenKeyExA( HKEY_LOCAL_MACHINE, "SOFTWARE\\Classes", 0, KEY_QUERY_VALUE, &hKey );
-
- if ( ERROR_SUCCESS == lResult )
- {
- lResult = RegOpenKeyExA( hKey, lpSubKey, 0, KEY_QUERY_VALUE, &hSubKey );
-
- if ( ERROR_SUCCESS == lResult )
- {
- DWORD nSubKeys = 1;
- szBuffer[0] = '\0';
-
- // we get the value of the default key fist and while we are on querying,
- // we ask for the subkey count, too
- lResult = RegQueryValueExA( hSubKey, "", NULL, NULL, (LPBYTE)szBuffer, &nSize );
- if ( ERROR_SUCCESS == lResult )
- RegQueryInfoKeyA( hSubKey, 0, 0, 0, &nSubKeys, 0, 0, 0, 0, 0, 0, 0 );
- RegCloseKey( hSubKey );
-
- // we will remove all key with an default value starting with ooostub but
- // we have to be careful about MSO keys
- if ( strncmp( szBuffer, "opendocument.", 13 ) == 0 )
- {
- if ( nSubKeys == 0 )
- {
- DeleteSubKeyTree( hKey, lpSubKey );
- }
- else
- {
- lResult = RegOpenKeyExA( hKey, lpSubKey, 0, KEY_SET_VALUE, &hSubKey );
- if ( ERROR_SUCCESS == lResult )
- RegDeleteValueA( hSubKey, "" );
- else
- OutputDebugStringFormat( "Could not open key %s for deleting: RegOpenKeyEx returned %ld.\n", lpSubKey, lResult );
- }
- }
- }
-
- RegCloseKey( hKey );
- }
-
- return ( ERROR_SUCCESS == lResult );
-}
-
-#endif
-
-//----------------------------------------------------------
-bool GetMsiProp( MSIHANDLE handle, LPCSTR name, /*out*/std::string& value )
-{
- DWORD sz = 0;
- LPSTR dummy = "";
- if (MsiGetPropertyA(handle, name, dummy, &sz) == ERROR_MORE_DATA)
- {
- sz++;
- DWORD nbytes = sz * sizeof(TCHAR);
- LPSTR buff = reinterpret_cast<LPSTR>(_alloca(nbytes));
- ZeroMemory(buff, nbytes);
- MsiGetPropertyA(handle, name, buff, &sz);
- value = buff;
- return true;
- }
- return false;
-}
-
-//----------------------------------------------------------
-bool IsSetMsiProp( MSIHANDLE handle, LPCSTR name )
-{
- std::string val;
- GetMsiProp( handle, name, val );
- return (val == "1");
-}
-
-//----------------------------------------------------------
-static void registerForExtension( MSIHANDLE handle, const int nIndex, bool bRegister )
-{
- CHAR sPropName[256];
- StringCchCopyA( sPropName, 256, "REGISTER_" );
- StringCchCatA( sPropName, 256, (g_Extensions[nIndex])+1 );
- CharUpperBuffA( sPropName+9, 4 );
-
- if ( bRegister ) {
- MsiSetPropertyA( handle, sPropName, "1" );
- OutputDebugStringFormat( "Set MSI property %s.\n", sPropName );
- } else {
- MsiSetPropertyA( handle, sPropName, "0" );
- OutputDebugStringFormat( "Unset MSI property %s.\n", sPropName );
- }
-}
-
-//----------------------------------------------------------
-static void saveOldRegistration( LPCSTR lpSubKey )
-{
- BOOL bRet = false;
- HKEY hKey = NULL;
- LONG lResult = RegOpenKeyExA( HKEY_CLASSES_ROOT, lpSubKey, 0,
- KEY_QUERY_VALUE|KEY_SET_VALUE, &hKey );
-
- if ( ERROR_SUCCESS == lResult )
- {
- CHAR szBuffer[1024];
- DWORD nSize = sizeof( szBuffer );
-
- lResult = RegQueryValueExA( hKey, "", NULL, NULL, (LPBYTE)szBuffer, &nSize );
- if ( ERROR_SUCCESS == lResult )
- {
- szBuffer[nSize] = '\0';
-
- // No need to save assocations for our own types
- if ( strncmp( szBuffer, "OpenOffice.org.", 15 ) != 0 )
- {
- // Save the old association
- RegSetValueExA( hKey, "OOoBackupAssociation", 0,
- REG_SZ, (LPBYTE)szBuffer, nSize );
- // Also save what the old association means, just so we can try to verify
- // if/when restoring it that the old application still exists
- HKEY hKey2 = NULL;
- lResult = RegOpenKeyExA( HKEY_CLASSES_ROOT, szBuffer, 0,
- KEY_QUERY_VALUE, &hKey2 );
- if ( ERROR_SUCCESS == lResult )
- {
- nSize = sizeof( szBuffer );
- lResult = RegQueryValueExA( hKey2, "", NULL, NULL, (LPBYTE)szBuffer, &nSize );
- if ( ERROR_SUCCESS == lResult )
- {
- RegSetValueExA( hKey, "OOoBackupAssociationDeref", 0,
- REG_SZ, (LPBYTE)szBuffer, nSize );
- }
- RegCloseKey( hKey2 );
- }
- }
- }
- RegCloseKey( hKey );
- }
-}
-
-//----------------------------------------------------------
-static void registerForExtensions( MSIHANDLE handle, BOOL bRegisterAll )
-{ // Check all file extensions
- int nIndex = 0;
- while ( g_Extensions[nIndex] != 0 )
- {
- saveOldRegistration( g_Extensions[nIndex] );
-
- BOOL bRegister = bRegisterAll || CheckExtensionInRegistry( g_Extensions[nIndex] );
- if ( bRegister )
- registerForExtension( handle, nIndex, true );
- ++nIndex;
- }
-}
-
-//----------------------------------------------------------
-static bool checkSomeExtensionInRegistry( const int nStart, const int nEnd )
-{ // Check all file extensions
- int nIndex = nStart;
- bool bFound = false;
-
- while ( !bFound && ( g_Extensions[nIndex] != 0 ) && ( nIndex < nEnd ) )
- {
- bFound = ! CheckExtensionInRegistry( g_Extensions[nIndex] );
-
- if ( bFound )
- OutputDebugStringFormat( "Found registration for [%s].\n", g_Extensions[nIndex] );
-
- ++nIndex;
- }
- return bFound;
-}
-
-//----------------------------------------------------------
-static void registerSomeExtensions( MSIHANDLE handle, const int nStart, const int nEnd, bool bRegister )
-{ // Check all file extensions
- int nIndex = nStart;
-
- while ( ( g_Extensions[nIndex] != 0 ) && ( nIndex < nEnd ) )
- {
- registerForExtension( handle, nIndex++, bRegister );
- }
-}
-
-//----------------------------------------------------------
-//----------------------------------------------------------
-//----------------------------------------------------------
-extern "C" UINT __stdcall LookForRegisteredExtensions( MSIHANDLE handle )
-{
- OutputDebugStringFormat( "LookForRegisteredExtensions: " );
-
- INSTALLSTATE current_state;
- INSTALLSTATE future_state;
-
- bool bWriterEnabled = false;
- bool bCalcEnabled = false;
- bool bImpressEnabled = false;
- bool bRegisterNone = IsSetMsiProp( handle, "REGISTER_NO_MSO_TYPES" );
-
- if ( ( ERROR_SUCCESS == MsiGetFeatureState( handle, L"gm_p_Wrt", &current_state, &future_state ) ) &&
- ( (future_state == INSTALLSTATE_LOCAL) || ((current_state == INSTALLSTATE_LOCAL) && (future_state == INSTALLSTATE_UNKNOWN) ) ) )
- bWriterEnabled = true;
-
- OutputDebugStringFormat( "LookForRegisteredExtensions: Install state Writer is [%d], will be [%d]", current_state, future_state );
- if ( bWriterEnabled )
- OutputDebugStringFormat( "LookForRegisteredExtensions: Writer is enabled" );
- else
- OutputDebugStringFormat( "LookForRegisteredExtensions: Writer is NOT enabled" );
-
- if ( ( ERROR_SUCCESS == MsiGetFeatureState( handle, L"gm_p_Calc", &current_state, &future_state ) ) &&
- ( (future_state == INSTALLSTATE_LOCAL) || ((current_state == INSTALLSTATE_LOCAL) && (future_state == INSTALLSTATE_UNKNOWN) ) ) )
- bCalcEnabled = true;
-
- OutputDebugStringFormat( "LookForRegisteredExtensions: Install state Calc is [%d], will be [%d]", current_state, future_state );
- if ( bCalcEnabled )
- OutputDebugStringFormat( "LookForRegisteredExtensions: Calc is enabled" );
- else
- OutputDebugStringFormat( "LookForRegisteredExtensions: Calc is NOT enabled" );
-
- if ( ( ERROR_SUCCESS == MsiGetFeatureState( handle, L"gm_p_Impress", &current_state, &future_state ) ) &&
- ( (future_state == INSTALLSTATE_LOCAL) || ((current_state == INSTALLSTATE_LOCAL) && (future_state == INSTALLSTATE_UNKNOWN) ) ) )
- bImpressEnabled = true;
-
- OutputDebugStringFormat( "LookForRegisteredExtensions: Install state Impress is [%d], will be [%d]", current_state, future_state );
- if ( bImpressEnabled )
- OutputDebugStringFormat( "LookForRegisteredExtensions: Impress is enabled" );
- else
- OutputDebugStringFormat( "LookForRegisteredExtensions: Impress is NOT enabled" );
-
- MsiSetPropertyA( handle, "SELECT_WORD", "" );
- MsiSetPropertyA( handle, "SELECT_EXCEL", "" );
- MsiSetPropertyA( handle, "SELECT_POWERPOINT", "" );
-
- if ( ! bRegisterNone )
- {
- if ( IsSetMsiProp( handle, "REGISTER_ALL_MSO_TYPES" ) )
- {
- if ( bWriterEnabled )
- MsiSetPropertyA( handle, "SELECT_WORD", "1" );
- if ( bCalcEnabled )
- MsiSetPropertyA( handle, "SELECT_EXCEL", "1" );
- if ( bImpressEnabled )
- MsiSetPropertyA( handle, "SELECT_POWERPOINT", "1" );
- }
- else
- {
- if ( bWriterEnabled && ! checkSomeExtensionInRegistry( WORD_START, EXCEL_START ) )
- {
- MsiSetPropertyA( handle, "SELECT_WORD", "1" );
- OutputDebugStringFormat( "LookForRegisteredExtensions: Register for MicroSoft Word" );
- }
- if ( bCalcEnabled && ! checkSomeExtensionInRegistry( EXCEL_START, POWERPOINT_START ) )
- {
- MsiSetPropertyA( handle, "SELECT_EXCEL", "1" );
- OutputDebugStringFormat( "LookForRegisteredExtensions: Register for MicroSoft Excel" );
- }
- if ( bImpressEnabled && ! checkSomeExtensionInRegistry( POWERPOINT_START, POWERPOINT_END ) )
- {
- MsiSetPropertyA( handle, "SELECT_POWERPOINT", "1" );
- OutputDebugStringFormat( "LookForRegisteredExtensions: Register for MicroSoft PowerPoint" );
- }
- }
- }
-
- MsiSetPropertyA( handle, "FILETYPEDIALOGUSED", "1" );
-
- return ERROR_SUCCESS;
-}
-
-//----------------------------------------------------------
-extern "C" UINT __stdcall RegisterSomeExtensions( MSIHANDLE handle )
-{
- OutputDebugStringFormat( "RegisterSomeExtensions: " );
-
- if ( IsSetMsiProp( handle, "SELECT_WORD" ) )
- {
- registerSomeExtensions( handle, WORD_START, EXCEL_START, true );
- MsiSetFeatureState( handle, L"gm_p_Wrt_MSO_Reg", INSTALLSTATE_LOCAL );
- OutputDebugStringFormat( "RegisterSomeExtensions: Register for MicroSoft Word" );
- }
- else
- {
- registerSomeExtensions( handle, WORD_START, EXCEL_START, false );
- MsiSetFeatureState( handle, L"gm_p_Wrt_MSO_Reg", INSTALLSTATE_ABSENT );
- }
-
- if ( IsSetMsiProp( handle, "SELECT_EXCEL" ) )
- {
- registerSomeExtensions( handle, EXCEL_START, POWERPOINT_START, true );
- MsiSetFeatureState( handle, L"gm_p_Calc_MSO_Reg", INSTALLSTATE_LOCAL );
- OutputDebugStringFormat( "RegisterSomeExtensions: Register for MicroSoft Excel" );
- }
- else
- {
- registerSomeExtensions( handle, EXCEL_START, POWERPOINT_START, false );
- MsiSetFeatureState( handle, L"gm_p_Calc_MSO_Reg", INSTALLSTATE_ABSENT );
- }
-
- if ( IsSetMsiProp( handle, "SELECT_POWERPOINT" ) )
- {
- registerSomeExtensions( handle, POWERPOINT_START, POWERPOINT_END, true );
- MsiSetFeatureState( handle, L"gm_p_Impress_MSO_Reg", INSTALLSTATE_LOCAL );
- OutputDebugStringFormat( "RegisterSomeExtensions: Register for MicroSoft PowerPoint" );
- }
- else
- {
- registerSomeExtensions( handle, POWERPOINT_START, POWERPOINT_END, false );
- MsiSetFeatureState( handle, L"gm_p_Impress_MSO_Reg", INSTALLSTATE_ABSENT );
- }
-
- return ERROR_SUCCESS;
-}
-
-//----------------------------------------------------------
-//
-// This is the (slightly misleadinly named) entry point for the
-// custom action called Regallmsdocdll.
-//
-extern "C" UINT __stdcall FindRegisteredExtensions( MSIHANDLE handle )
-{
- if ( IsSetMsiProp( handle, "FILETYPEDIALOGUSED" ) )
- {
- OutputDebugStringFormat( "FindRegisteredExtensions: FILETYPEDIALOGUSED!" );
- return ERROR_SUCCESS;
- }
-
- OutputDebugStringFormat( "FindRegisteredExtensions:" );
-
- bool bRegisterAll = IsSetMsiProp( handle, "REGISTER_ALL_MSO_TYPES" );
-
- if ( IsSetMsiProp( handle, "REGISTER_NO_MSO_TYPES" ) )
- {
- OutputDebugStringFormat( "FindRegisteredExtensions: Register none!" );
- return ERROR_SUCCESS;
- }
- else if ( bRegisterAll )
- OutputDebugStringFormat( "FindRegisteredExtensions: Force all on" );
- else
- OutputDebugStringFormat( "FindRegisteredExtensions: " );
-
- // setting the msi properties SELECT_* will force registering for all corresponding
- // file types
- if ( IsSetMsiProp( handle, "SELECT_WORD" ) )
- registerSomeExtensions( handle, WORD_START, EXCEL_START, true );
- if ( IsSetMsiProp( handle, "SELECT_EXCEL" ) )
- registerSomeExtensions( handle, EXCEL_START, POWERPOINT_START, true );
- if ( IsSetMsiProp( handle, "SELECT_POWERPOINT" ) )
- registerSomeExtensions( handle, POWERPOINT_START, POWERPOINT_END, true );
-
- registerForExtensions( handle, bRegisterAll );
-
- return ERROR_SUCCESS;
-}
-
-#if 0
-
-//----------------------------------------------------------
-//
-// This entry is not called for any custom action.
-//
-extern "C" UINT __stdcall DeleteRegisteredExtensions( MSIHANDLE /*handle*/ )
-{
- OutputDebugStringFormat( "DeleteRegisteredExtensions\n" );
-
- // remove all file extensions
- int nIndex = 0;
- while ( g_Extensions[nIndex] != 0 )
- {
- RemoveExtensionInRegistry( g_Extensions[nIndex] );
- ++nIndex;
- }
-
- return ERROR_SUCCESS;
-}
-
-#endif
-
-//----------------------------------------------------------
-static void restoreOldRegistration( LPCSTR lpSubKey )
-{
- BOOL bRet = false;
- HKEY hKey = NULL;
- LONG lResult = RegOpenKeyExA( HKEY_CLASSES_ROOT, lpSubKey, 0,
- KEY_QUERY_VALUE|KEY_SET_VALUE, &hKey );
-
- if ( ERROR_SUCCESS == lResult )
- {
- CHAR szBuffer[1024];
- DWORD nSize = sizeof( szBuffer );
-
- lResult = RegQueryValueExA( hKey, "OOoBackupAssociation", NULL, NULL,
- (LPBYTE)szBuffer, &nSize );
- if ( ERROR_SUCCESS == lResult )
- {
- HKEY hKey2 = NULL;
- lResult = RegOpenKeyExA( HKEY_CLASSES_ROOT, szBuffer, 0,
- KEY_QUERY_VALUE, &hKey2 );
- if ( ERROR_SUCCESS == lResult )
- {
- CHAR szBuffer2[1024];
- DWORD nSize2 = sizeof( szBuffer2 );
-
- lResult = RegQueryValueExA( hKey2, "", NULL, NULL, (LPBYTE)szBuffer2, &nSize2 );
- if ( ERROR_SUCCESS == lResult )
- {
- CHAR szBuffer3[1024];
- DWORD nSize3 = sizeof( szBuffer3 );
-
- // Try to verify that the old association is OK to restore
- lResult = RegQueryValueExA( hKey, "OOoBackupAssociationDeref", NULL, NULL,
- (LPBYTE)szBuffer3, &nSize3 );
- if ( ERROR_SUCCESS == lResult )
- {
- if ( nSize2 == nSize3 && strcmp (szBuffer2, szBuffer3) == 0)
- {
- // Yep. So restore it
- RegSetValueExA( hKey, "", 0, REG_SZ, (LPBYTE)szBuffer, nSize );
- }
- }
- }
- RegCloseKey( hKey2 );
- }
- RegDeleteValueA( hKey, "OOoBackupAssociation" );
- }
- RegDeleteValueA( hKey, "OOoBackupAssociationDeref" );
- RegCloseKey( hKey );
- }
-}
-
-//----------------------------------------------------------
-//
-// This function is not in OO.o. We call this from the
-// Restoreregallmsdocdll custom action.
-//
-extern "C" UINT __stdcall RestoreRegAllMSDoc( MSIHANDLE /*handle*/ )
-{
- OutputDebugStringFormat( "RestoreRegAllMSDoc\n" );
-
- int nIndex = 0;
- while ( g_Extensions[nIndex] != 0 )
- {
- restoreOldRegistration( g_Extensions[nIndex] );
- ++nIndex;
- }
-
-
- return ERROR_SUCCESS;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */