3 Stimmen

RegisterTypeLibForUser-Aufruf scheint nicht zu funktionieren - irgendwelche Ideen?

Dies ist eigentlich eine Folgefrage zu eine frühere , wo ich Anwendungen, TLBs und OCXs pro Benutzer registrieren muss, anstatt in HKLM. Ich habe den folgenden Code geschrieben - basierend auf den Antworten hier und anderswo, ABER die TLB wird nicht registriert - es wird kein Fehler ausgelöst, es passiert einfach nichts (dieser Codeschnipsel stammt aus dem Embarcadero-Website .

procedure RegisterTypeLibrary(TypeLib: ITypeLib; const ModuleName: string);
var
  Name: WideString;
  HelpPath: WideString;
  RegisterTypeLibForUser : function(tlib: ITypeLib; szFullPath, szHelpDir: POleStr): HResult; stdcall;
  res : HResult;
begin
  Name := ModuleName;
  HelpPath := ExtractFilePath(ModuleName);
  res:=RegisterTypeLib(TypeLib, PWideChar(Name), PWideChar(HelpPath));
  if res <> S_OK then begin
    @RegisterTypeLibForUser:=GetProcAddress(GetModuleHandle('oleaut32.dll'), 'RegisterTypeLibForUser');
    if (@RegisterTypeLibForUser <> nil) then begin
      res:=RegisterTypeLibForUser(TypeLib, PWideChar(Name), PWideChar(HelpPath));
    end;
  end;
  //MessageBox(GetForegroundWindow, PChar(IntToHex(res, 8)), nil, MB_OK);
  OleCheck(res);
end;

Hat irgendjemand einen Tipp für mich, denn ich bin jetzt verloren.

Update :

Vielen Dank für all die Hilfe und die Vorschläge, um das zu klären ...

So wie ich es verstehe, sollte ich keine erhöhten Rechte benötigen, und so sollte dies zu arbeiten, aber ich könnte falsch sein. Anwendung ist nicht virtualisiert (oder zumindest ist es nicht gemeint zu sein), im Moment ruft es nur den oben genannten Code, und nichts anderes.

Wenn ich es als Administrator ausführe, funktioniert es (oder gibt zumindest keine Fehlermeldung aus), wenn ich es nicht als Administrator ausführe, bekomme ich eine Fehlermeldung. Kann ich das also einfach gar nicht machen, oder mache ich es falsch? Das ist dasselbe wie bei der Registrierung über regsvr32 obwohl das eine etwas andere Frage ist - wie kann man das gleiche tun, aber für OCX-Steuerelemente.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X