فهرست منبع

--- Merging r22656 into '.':
U packages/winunits-base/src/comserv.pp
--- Merging r22657 into '.':
U packages/winunits-base/src/comobj.pp

# revisions: 22656,22657
r22656 | yury | 2012-10-15 23:27:45 +0200 (Mon, 15 Oct 2012) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/comserv.pp

* Ignore an error returned by UnRegisterTypeLib() to allow successful un-registration of whole COM object if type library is not registered atm.
r22657 | yury | 2012-10-15 23:30:54 +0200 (Mon, 15 Oct 2012) | 3 lines
Changed paths:
M /trunk/packages/winunits-base/src/comobj.pp

* 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: branches/fixes_2_6@22682 -

marco 13 سال پیش
والد
کامیت
37c85c8114
2فایلهای تغییر یافته به همراه30 افزوده شده و 26 حذف شده
  1. 29 25
      packages/winunits-base/src/comobj.pp
  2. 1 1
      packages/winunits-base/src/comserv.pp

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

@@ -1022,43 +1022,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');

+ 1 - 1
packages/winunits-base/src/comserv.pp

@@ -207,7 +207,7 @@ begin
   //http://www.experts-exchange.com/Programming/Misc/Q_20634807.html
   OleCheck(TypeLib.GetLibAttr(ptla));
   try
-    OleCheck(ActiveX.UnRegisterTypeLib(ptla^.guid, ptla^.wMajorVerNum, ptla^.wMinorVerNum, ptla^.lcid, ptla^.syskind));
+    ActiveX.UnRegisterTypeLib(ptla^.guid, ptla^.wMajorVerNum, ptla^.wMinorVerNum, ptla^.lcid, ptla^.syskind);
   finally
     TypeLib.ReleaseTLibAttr(ptla);
   end;