Eine beliebte Funktion von Delphi ist die Projektbereitstellung einer Anwendung mit einer ausführbaren Datei (exe). Wenn die DLL- oder ActiveX-Steuerelemente in Ihrem Projekt jedoch nicht auf den Computern der Benutzer registriert sind, wird beim Ausführen der exe-Datei ein "EOleSysError" angezeigt. Um dies zu vermeiden, verwenden Sie das Befehlszeilentool regsvr32.exe.
Durch manuelles Verwenden von regsvr32.exe (Windows.Start - Run) werden selbstregistrierbare DLL- und ActiveX-Steuerelemente auf einem System registriert und die Registrierung aufgehoben. Regsvr32.exe weist das System an, zu versuchen, die Komponente zu laden und ihre DLLSelfRegister-Funktion aufzurufen. Wenn dieser Versuch erfolgreich ist, zeigt Regsvr32.exe ein Dialogfeld an, das den Erfolg anzeigt.
RegSvr32.exe verfügt über die folgenden Befehlszeilenoptionen:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] DLL-Name / s - Lautlos; Keine Meldungsfelder anzeigen / u - Server abmelden / i - DllInstall aufrufen und optional [cmdline] übergeben; Bei Verwendung mit / u ruft dll uninstall / n auf - DllRegisterServer nicht aufrufen; Diese Option muss mit / i verwendet werden
Anruf RegSvr32.exe Innerhalb von Delphi-Code
Um das Tool regsvr32 im Delphi-Code aufzurufen, verwenden Sie die Funktion „RegisterOCX“, um eine Datei auszuführen und warten Sie, bis die Ausführung abgeschlossen ist.
So könnte die 'RegisterOCX'-Prozedur aussehen:
Verfahren RegisterOCX; Art TRegFunc = Funktion : HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: Zeichenfolge; Start Versuchen ocxPath: = ExtractFilePath (Application.ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); wenn aHandle 0 dann Start ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); wenn Zugewiesen (ARegFunc) dann Start ExecAndWait ('regsvr32', '/ s' + ocxPath); Ende; FreeLibrary (aHandle); Ende; außer ShowMessage (Format ('% s kann nicht registriert werden', [ocxPath])); Ende; Ende;
Beachten Sie das ocxPath Variable verweist auf die 'Flash.ocx' Macromedia OCX.
Um sich selbst registrieren zu können, muss eine OCX die Funktion DllRegisterServer implementieren, um Registrierungseinträge für alle Klassen im Steuerelement zu erstellen. Sorgen Sie sich nicht um die DllRegisterServer-Funktion, sondern stellen Sie sicher, dass sie vorhanden ist. Der Einfachheit halber wird davon ausgegangen, dass sich die OCX in demselben Ordner befindet, in dem sich die Anwendung befindet.
Die ExecAndWait-Zeile in dem obigen Code ruft das Regsvr32-Tool auf, indem die Option "/ s" zusammen mit dem vollständigen Pfad zu dem OCX übergeben wird. Die Funktion ist ExecAndWait.
Verwendet Shellapi;… Funktion ExecAndWait (const ExecuteFile, ParamString: Zeichenfolge): Boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; Start FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); mit SEInfo fange doch an fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application.Handle; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; wenn ShellExecuteEx (@SEInfo) dann Start wiederholen Application.ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); bis um (ExitCode STILL_ACTIVE) oder Application.Terminated; Ergebnis: = True; Ende sonst Ergebnis: = Falsch; Ende;
Die ExecAndWait-Funktion verwendet den ShellExecuteEx-API-Aufruf, um eine Datei auf einem System auszuführen. Weitere Beispiele zum Ausführen von Dateien aus Delphi finden Sie unter Ausführen und Ausführen von Anwendungen und Dateien aus Delphi-Code.
Wenn ein ActiveX-Steuerelement auf dem Computer des Benutzers registriert werden muss, stellen Sie sicher, dass der Benutzer über die vom Programm benötigte OCX verfügt, indem Sie das gesamte ActiveX (oder die DLL) als Ressource in die Exe der Anwendung einfügen. Wenn die OCX in der exe gespeichert ist, ist es einfach, sie zu extrahieren, auf Festplatte zu speichern und die RegisterOCX-Prozedur aufzurufen.