Wie versucht Com cocrreateinstanceex, Typen zu laden (für Nicht-Adminampfer-Gewinn-Benutzer)?

StackOverflow https://stackoverflow.com/questions/4595190

  •  15-10-2019
  •  | 
  •  

Frage

Ich habe ein sehr kompliziertes Problem, das nur für nicht-adminische Windows-Benutzer auftritt.

Ich führe ein Skript aus, das sich auf dem Desktop befindet, und rufe eine Funktion in einer C ++ - DLL auf. Dann ist der Fluss wie folgt:

  1. Mein C ++ - DLL erstellt einen Delphi -Prozess und sendet ihm einen Richtlinien als Parameter.
  2. Bei der Initialisierung registriert mein Delphi eine Klasse C mit der angegebenen Richtlinie mit einer COM -Objektfabrik.
  3. Meine C ++ - DLL versucht Cocrreateinstanceex mit derselben Richtlinie zu nennen. ==> Die Operation schlägt mit HRESULT 0x80029C4A FEHLER LADING TYPBIBLIOTHER/DLL fehl.

Aus der Delphi -Seite wird keine Ausnahme geworfen - die Registrierung scheint reibungslos zu funktionieren.

Ich habe Process Monitor verwendet und bin zu meiner Überraschung verwendet, dass Cocrreateinstanceex aufgerufen wird, es Versuch besteht, meine Delphi EXE -Datei von einem falschen Ort aus zu lesen. Anstatt zu versuchen, dort zuzugreifen, wo die EXE registriert ist, gibt es einen Versuch, vom Desktop auf die Exe zuzugreifen, wo Skript s liegt, und natürlich ist die Exe nicht da.

Dies geschieht nur für Nicht-Adminamente Benutzer. Wenn ein Administrator dieses Skript jemals zuvor ausgeführt wird, wird es für die Nicht-Adminpfung vollkommen gut ausgeführt.

Ich versuche jetzt herauszufinden, warum das passiert. Deshalb versuche ich, den Fluss von Cocrreateinstanceex zu verstehen. Ich fand keine nützlichen Informationen im Web. Wie versucht Cocrreateinstanceex, Typen zu laden? Wo versucht es zu schauen? Haben Sie eine Idee, wie die beschriebene Situation passieren kann?

Alle Informationen oder Idee werden sehr geschätzt!

War es hilfreich?

Lösung

Es stellt sich heraus, dass die Exe des Delphi -Prozesses mit relativem Pfad anstelle des vollständigen Pfades registriert wurde.

Ich bin mir immer noch nicht sicher, warum es für Administrator ordnungsgemäß funktioniert hat ... Wenn jemand eine Idee hat, werde ich interessiert sein zu hören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top