Hans Leidekker : msi: Clean up better when removing a product.
Alexandre Julliard
julliard at winehq.org
Thu Jan 20 12:41:22 CST 2011
Module: wine
Branch: master
Commit: 701f14801f6fa05ba871bfb0da56d55073133b4d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=701f14801f6fa05ba871bfb0da56d55073133b4d
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Jan 20 09:06:47 2011 +0100
msi: Clean up better when removing a product.
---
dlls/msi/action.c | 15 +++++----------
dlls/msi/msipriv.h | 1 +
dlls/msi/registry.c | 15 +++++++++++++++
3 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 4bd5157..5a97d17 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -5139,21 +5139,16 @@ static UINT msi_unpublish_product(MSIPACKAGE *package, WCHAR *remove)
MSIREG_DeleteUserDataProductKey(package->ProductCode);
MSIREG_DeleteUninstallKey(package);
- if (package->Context == MSIINSTALLCONTEXT_MACHINE)
- {
- MSIREG_DeleteLocalClassesProductKey(package->ProductCode);
- MSIREG_DeleteLocalClassesFeaturesKey(package->ProductCode);
- }
- else
- {
- MSIREG_DeleteUserProductKey(package->ProductCode);
- MSIREG_DeleteUserFeaturesKey(package->ProductCode);
- }
+ MSIREG_DeleteLocalClassesProductKey(package->ProductCode);
+ MSIREG_DeleteLocalClassesFeaturesKey(package->ProductCode);
+ MSIREG_DeleteUserProductKey(package->ProductCode);
+ MSIREG_DeleteUserFeaturesKey(package->ProductCode);
upgrade = msi_dup_property(package->db, szUpgradeCode);
if (upgrade)
{
MSIREG_DeleteUserUpgradeCodesKey(upgrade);
+ MSIREG_DeleteClassesUpgradeCodesKey(upgrade);
msi_free(upgrade);
}
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index 47a35b8..b9eb3ea 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -836,6 +836,7 @@ extern UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct);
extern UINT MSIREG_DeleteUserFeaturesKey(LPCWSTR szProduct);
extern UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid);
extern UINT MSIREG_DeleteUserUpgradeCodesKey(LPCWSTR szUpgradeCode);
+extern UINT MSIREG_DeleteClassesUpgradeCodesKey(LPCWSTR szUpgradeCode);
extern UINT MSIREG_OpenClassesUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY* key, BOOL create);
extern UINT MSIREG_DeleteLocalClassesProductKey(LPCWSTR szProductCode);
extern UINT MSIREG_DeleteLocalClassesFeaturesKey(LPCWSTR szProductCode);
diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c
index 926c90d..017aa24 100644
--- a/dlls/msi/registry.c
+++ b/dlls/msi/registry.c
@@ -1182,6 +1182,21 @@ UINT MSIREG_OpenClassesUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY* key, BOOL cr
return RegOpenKeyW(HKEY_CLASSES_ROOT, keypath, key);
}
+UINT MSIREG_DeleteClassesUpgradeCodesKey(LPCWSTR szUpgradeCode)
+{
+ WCHAR squished_pc[GUID_SIZE];
+ WCHAR keypath[0x200];
+
+ TRACE("%s\n", debugstr_w(szUpgradeCode));
+ if (!squash_guid(szUpgradeCode, squished_pc))
+ return ERROR_FUNCTION_FAILED;
+ TRACE("squished (%s)\n", debugstr_w(squished_pc));
+
+ sprintfW(keypath, szInstaller_ClassesUpgrade_fmt, squished_pc);
+
+ return RegDeleteTreeW(HKEY_CLASSES_ROOT, keypath);
+}
+
/*************************************************************************
* MsiDecomposeDescriptorW [MSI.@]
*
More information about the wine-cvs
mailing list