summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndras Timar <atimar@suse.com>2012-06-20 21:07:29 +0200
committerCaolán McNamara <caolanm@redhat.com>2012-06-21 16:43:10 +0100
commita13c54699e53e1174d575991ddfb848d6a8a01d9 (patch)
treed961f618e673c669c26c4788f8c9002a6e914365
parent9ebfc2d227507cbb25c8cfdbf54e50286d76cc8d (diff)
fdo#51270 fix RemoveExtensions custom action
FINDPRODUCT property was not available to this deferred custom action. Not to mention that registry keys are also deleted at his stage of uninstallation. The proper solution is to set the installation directory with a type 51 custom action, and pass it to RemoveExtensions custom action via CustomActionData property. Change-Id: I0ac18b3a0b19ff1a87bcf580fad9c7fdadb26f76 Signed-off-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 5cfb974d41642d1acbaadb553c16cf8d174f524a) Signed-off-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt2
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt3
-rw-r--r--instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt3
-rw-r--r--setup_native/source/win32/customactions/shellextensions/registerextensions.cxx44
4 files changed, 13 insertions, 39 deletions
diff --git a/instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt b/instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt
index 18b3ca47bdf2..2dd9e91da025 100644
--- a/instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt
+++ b/instsetoo_native/inc_openoffice/windows/msi_templates/AdminExe.idt
@@ -11,4 +11,4 @@ InstallFinalize 400
InstallInitialize 250
InstallValidate 200
ScheduleReboot ISSCHEDULEREBOOT 375
-SetInstalllocation 390
+SetInstallLocation1 390
diff --git a/instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt b/instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt
index 913bfe735ab7..938ba05a50c3 100644
--- a/instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt
+++ b/instsetoo_native/inc_openoffice/windows/msi_templates/CustomAc.idt
@@ -122,7 +122,8 @@ setAllUsersProfile2K 51 ALLUSERSPROFILE [%ALLUSERSPROFILE]
SetAllUsersProfileNT 51 ALLUSERSPROFILE [%SystemRoot]\Profiles\All Users
setUserProfileNT 51 USERPROFILE [%USERPROFILE]
SetARPInstallLocation 51 ARPINSTALLLOCATION [INSTALLLOCATION]
-SetInstalllocation 51 RegisterExtensions [INSTALLLOCATION]
+SetInstallLocation1 51 RegisterExtensions [INSTALLLOCATION]
+SetInstallLocation2 51 RemoveExtensions [INSTALLLOCATION]
NewProductFound 19 OOO_CUSTOMACTION_1
SameProductFound 19 OOO_CUSTOMACTION_2
SetLanguageSelected 51 LANG_SELECTED 1
diff --git a/instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt b/instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt
index 81c1e9a021c1..473b0f87a6fe 100644
--- a/instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt
+++ b/instsetoo_native/inc_openoffice/windows/msi_templates/InstallE.idt
@@ -172,7 +172,8 @@ ScheduleReboot ISSCHEDULEREBOOT 3125
SelfRegModules 2850
SelfUnregModules 1100
SetARPInstallLocation 990
-SetInstalllocation 3140
+SetInstallLocation1 3140
+SetInstallLocation2 3141
SetODBCFolders 550
StartServices VersionNT 2800
StopServices VersionNT 950
diff --git a/setup_native/source/win32/customactions/shellextensions/registerextensions.cxx b/setup_native/source/win32/customactions/shellextensions/registerextensions.cxx
index 1e30c4611245..0fbe4e113b02 100644
--- a/setup_native/source/win32/customactions/shellextensions/registerextensions.cxx
+++ b/setup_native/source/win32/customactions/shellextensions/registerextensions.cxx
@@ -211,44 +211,16 @@ extern "C" UINT __stdcall RegisterExtensions(MSIHANDLE handle)
extern "C" UINT __stdcall RemoveExtensions(MSIHANDLE handle)
{
- std::_tstring mystr;
-
- // Finding the product with the help of the propery FINDPRODUCT,
- // that contains a Windows Registry key, that points to the install location.
-
- TCHAR szValue[8192];
- DWORD nValueSize = sizeof(szValue);
- HKEY hKey;
- std::_tstring sInstDir;
-
- std::_tstring sProductKey = GetMsiProperty( handle, TEXT("FINDPRODUCT") );
-
- if ( ERROR_SUCCESS == RegOpenKey( HKEY_CURRENT_USER, sProductKey.c_str(), &hKey ) )
- {
- if ( ERROR_SUCCESS == RegQueryValueEx( hKey, TEXT("INSTALLLOCATION"), NULL, NULL, (LPBYTE)szValue, &nValueSize ) )
- {
- sInstDir = szValue;
- }
- RegCloseKey( hKey );
- }
- else if ( ERROR_SUCCESS == RegOpenKey( HKEY_LOCAL_MACHINE, sProductKey.c_str(), &hKey ) )
- {
- if ( ERROR_SUCCESS == RegQueryValueEx( hKey, TEXT("INSTALLLOCATION"), NULL, NULL, (LPBYTE)szValue, &nValueSize ) )
- {
- sInstDir = szValue;
- }
- RegCloseKey( hKey );
- }
- else
- {
- return ERROR_SUCCESS;
- }
-
- // Removing complete directory "Basis\prereg\bundled"
+ std::_tstring sInstDir = GetMsiProperty( handle, TEXT("CustomActionData") );
- std::_tstring sCacheDir = sInstDir + TEXT("share\\prereg\\bundled");
+ // Removing complete directory "share\prereg\bundled"
+ RemoveCompleteDirectory( sInstDir + TEXT("share\\prereg\\bundled") );
- RemoveCompleteDirectory( sCacheDir );
+ // At this point we need to take care about removing upper directories,
+ // because we are after InstallFinalize. We remove only empty directories.
+ RemoveDirectory( (sInstDir + TEXT("share\\prereg")).c_str() );
+ RemoveDirectory( (sInstDir + TEXT("share")).c_str() );
+ RemoveDirectory( sInstDir.c_str() );
return ERROR_SUCCESS;
}