Browse Source

* Do not write unneeded registry keys if ClassName is empty.
* VersionIndependentProgID should not include version.
* Also delete the "CurVer" registry key during un-registration to perform complete clean-up.

git-svn-id: trunk@22657 -

yury 13 years ago
parent
commit
76dd6cfaac
1 changed files with 29 additions and 25 deletions
  1. 29 25
      packages/winunits-base/src/comobj.pp

+ 29 - 25
packages/winunits-base/src/comobj.pp

@@ -1023,43 +1023,47 @@ HKCR
         if Register then
         begin
           classidguid := GUIDToString(ClassID);
-          CreateRegKey('CLSID\' + classidguid, '', Description);
-          if ClassVersion <> '' then
-          begin
-            CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID + '.' + ClassVersion);
-            CreateRegKey('CLSID\' + classidguid + '\VersionIndependentProgID', '', ProgID + '.' + ClassVersion);
-          end
-          else
-            CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID);
-
           CreateRegKey('CLSID\' + classidguid + '\InprocServer32', '', FComServer.ServerFileName);
-
           //tmSingle, tmApartment, tmFree, tmBoth, tmNeutral
           CreateRegKey('CLSID\' + classidguid + '\InprocServer32', 'ThreadingModel', ThreadModelToString(ThreadingModel));
-
-          CreateRegKey(ProgID, '', Description);
-          CreateRegKey(ProgID + '\CLSID', '', GUIDToString(ClassID));
-          if ClassVersion <> '' then
+          CreateRegKey('CLSID\' + classidguid, '', Description);
+          if ClassName <> '' then
           begin
-            CreateRegKey(ProgID + '\CurVer', '', ProgID + '.' + ClassVersion);
-            CreateRegKey(ProgID + '.' + ClassVersion, '', Description);
-            CreateRegKey(ProgID + '.' + ClassVersion + '\CLSID', '', GUIDToString(ClassID));
+            if ClassVersion <> '' then
+            begin
+              CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID + '.' + ClassVersion);
+              CreateRegKey('CLSID\' + classidguid + '\VersionIndependentProgID', '', ProgID);
+            end
+            else
+              CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID);
+
+            CreateRegKey(ProgID, '', Description);
+            CreateRegKey(ProgID + '\CLSID', '', GUIDToString(ClassID));
+            if ClassVersion <> '' then
+            begin
+              CreateRegKey(ProgID + '\CurVer', '', ProgID + '.' + ClassVersion);
+              CreateRegKey(ProgID + '.' + ClassVersion, '', Description);
+              CreateRegKey(ProgID + '.' + ClassVersion + '\CLSID', '', GUIDToString(ClassID));
+            end;
           end;
-
         end else
         begin
           classidguid := GUIDToString(ClassID);
           DeleteRegKey('CLSID\' + classidguid + '\InprocServer32');
           DeleteRegKey('CLSID\' + classidguid + '\VersionIndependentProgID');
-          DeleteRegKey('CLSID\' + classidguid + '\ProgID');
-          DeleteRegKey('CLSID\' + classidguid);
-          DeleteRegKey(ProgID + '\CLSID');
-          DeleteRegKey(ProgID);
-          if ClassVersion <> '' then
+          if ClassName <> '' then
           begin
-            DeleteRegKey(ProgID + '.' + ClassVersion + '\CLSID');
-            DeleteRegKey(ProgID + '.' + ClassVersion);
+            DeleteRegKey('CLSID\' + classidguid + '\ProgID');
+            DeleteRegKey(ProgID + '\CLSID');
+            if ClassVersion <> '' then
+            begin
+              DeleteRegKey(ProgID + '\CurVer');
+              DeleteRegKey(ProgID + '.' + ClassVersion + '\CLSID');
+              DeleteRegKey(ProgID + '.' + ClassVersion);
+            end;
+            DeleteRegKey(ProgID);
           end;
+          DeleteRegKey('CLSID\' + classidguid);
         end;
 {$ifdef DEBUG_COM}
         WriteLn('UpdateRegistry end');