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.