Announcement

Collapse
No announcement yet.

Wenn keine Berechtigung TAutoObjectFactory.Create ignoririeren?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wenn keine Berechtigung TAutoObjectFactory.Create ignoririeren?

    Ich habe bestehende Anwendung nun erweitert, so dass ein COM Interface zur Verfügung steht.
    Nun soll die Anwendung auch bei Anwender ohne Adminrechte funktionieren, jedoch einfach ohne COM Serverfunktionalität.

    Der ComServer wird wie folgt erstellt:

    initialization
    try
    TAutoObjectFactory.Create(ComServer, TTestApp, Class_TestApp, ciSingleInstance);
    except
    end;
    end.

    Wenn der Benutzer die nötigen Berechtigung unter Windows XP nicht hat, gibt es eine Exception, welche nicht mit try .. except abgefangen werden kann. Wenn ich obigen Code in OnFormCreate verschiebe, erhalten ich zwar keinen Absturz mehr, dafür funktioniert der COM Server nicht mehr.

    Wer kann mir weiterhelfen? DANKE!

  • #2
    Hallo,

    >Wenn der Benutzer die nötigen Berechtigung unter Windows XP nicht hat....

    als Eigenheit registriert sich ein mit Delphi kompiliertes Automation-Objekt bei jedem Programmstart neu. Wenn dies nicht erwünscht ist (weil der Anwender zum Zeitpunkt des Aufrufs keine Schreibrechte auf den Registry-Zweig HKEY_CLASSES_ROOT hat), kann man zum Beispiel einen eigenen Nachfolger der Class Factory anlegen, um dort die Methode UpdateRegistry zu überschreiben:
    <pre>
    type
    TOSAutoObjectFactory = class(TAutoObjectFactory)
    procedure UpdateRegistry(Register: Boolean); override;
    end;
    </pre>
    In der Ereignisbehandlungsmethode für OnFormCreate kann dann über <i>if (ParamCount = 1) and (AnsiCompareText(ParamStr(1),'/R') = 0) then...</i> der spezielle Registrierungsaufruf durch den Admin abgefragt werden, um nur dann das Automation-Objekt in der Registry anzumelden

    Comment


    • #3
      Super, Danke für die prompte Antwort

      Comment


      • #4
        Hallo,
        ich habe obiges versucht, doch es gibt weiterhin die Exception, denn das Problem liegt vermutlich beim TComServer selber.

        Dieser veruscht selber auf die Registry zuzugreifen und dieses Objekt kann man nicht überschreiben. Oder

        Comment


        • #5
          Hallo,

          ich werde eben langsam alt und sollte mich nicht mehr nur auf das löchrige Gedächtnis verlassen ;-)

          Das folgende Rezept sollte die Beschwerden aber nun endgültig lindern:
          <pre>
          <b>initialization</b>
          <b>if</b> (Comserver.StartMode = smStandAlone) <b>and</b> <b>not</b>
          ((ParamCount = 1) <b>and</b> (AnsiCompareText(ParamStr(1),<font color="#9933CC">'/R'</font>) = 0)) <b>then</b>
          TAutoObjectFactory.Create(ComServer, TAutObj, Class_AutObj,
          ciInternal, tmApartment)
          <b>else</b>
          TAutoObjectFactory.Create(ComServer, TAutObj, Class_AutObj,
          ciSingleInstance, tmApartment);
          </pre&gt

          Comment

          Working...
          X