Module: wine Branch: master Commit: fbaaedd967d041a1d395dc427b24b651a60df5bf URL: http://source.winehq.org/git/wine.git/?a=commit;h=fbaaedd967d041a1d395dc427b...
Author: Huw Davies huw@codeweavers.com Date: Thu Apr 1 13:07:58 2010 +0100
oleaut32: Only unregister those types that were registered.
---
dlls/oleaut32/typelib.c | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index cbf68b5..468f001 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -835,19 +835,23 @@ HRESULT WINAPI UnRegisterTypeLib( goto enddeleteloop; }
- /* the path to the type */ - get_interface_key( &typeAttr->guid, subKeyName ); + if ((kind == TKIND_INTERFACE && (typeAttr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) || + kind == TKIND_DISPATCH) + { + /* the path to the type */ + get_interface_key( &typeAttr->guid, subKeyName );
- /* Delete its bits */ - if (RegOpenKeyExW(HKEY_CLASSES_ROOT, subKeyName, 0, KEY_WRITE, &subKey) != ERROR_SUCCESS) { - goto enddeleteloop; + /* Delete its bits */ + if (RegOpenKeyExW(HKEY_CLASSES_ROOT, subKeyName, 0, KEY_WRITE, &subKey) != ERROR_SUCCESS) + goto enddeleteloop; + + RegDeleteKeyW(subKey, ProxyStubClsidW); + RegDeleteKeyW(subKey, ProxyStubClsid32W); + RegDeleteKeyW(subKey, TypeLibW); + RegCloseKey(subKey); + subKey = NULL; + RegDeleteKeyW(HKEY_CLASSES_ROOT, subKeyName); } - RegDeleteKeyW(subKey, ProxyStubClsidW); - RegDeleteKeyW(subKey, ProxyStubClsid32W); - RegDeleteKeyW(subKey, TypeLibW); - RegCloseKey(subKey); - subKey = NULL; - RegDeleteKeyW(HKEY_CLASSES_ROOT, subKeyName);
enddeleteloop: if (typeAttr) ITypeInfo_ReleaseTypeAttr(typeInfo, typeAttr);