A népszerű jellemzője Delphi az alkalmazás projekt telepítése egy futtatható fájl (exe). Ha azonban a projekt DLL vagy ActiveX vezérlőit nem regisztrálták a felhasználó gépein, akkor az „EOleSysError” jelenik meg az exe fájl futtatásának válaszában. Ennek elkerülése érdekében használja a regsvr32.exe parancssori eszközt.
RegSvr32.exe parancs
A regsvr32.exe kézi használata (Windows 2003. Start - Run) regisztrálja és törli az önregisztrálható DLL és ActiveX vezérlőket egy rendszeren. A Regsvr32.exe utasítja a rendszert, hogy próbálja meg betölteni az összetevőt, és hívja meg annak DLLSelfRegister funkcióját. Ha ez a kísérlet sikeres, a Regsvr32.exe a sikert jelző párbeszédpanelt jeleníti meg.
A RegSvr32.exe a következő parancssori lehetőségekkel rendelkezik:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - csendes; ne jelenjen meg üzenet mező. / u - Szerver regisztrációjának megszüntetése. / i - Hívja a DllInstall programot, opcionálisan továbbítva [cmdline]; / u használatával felhívja a dll eltávolítását. / n - ne hívja meg a DllRegisterServer; ezt az opciót / i-vel kell használni
Hívás RegSvr32.exe A Delphi kódon belül
A regsvr32 eszköz Delphi kódon belüli felhívásához használja a „RegisterOCX” funkciót egy fájl végrehajtásához, és várja meg, amíg a végrehajtás befejeződik.
Így néz ki a 'RegisterOCX' eljárás:
eljárás RegisterOCX; típus TRegFunc = funkció: HResult; stdcall; var ARegFunc: TRegFunc; aKezelés: Csonk; ocxPath: húr; kezdődikpróbáld ki ocxPath: = ExtractFilePath (alkalmazás. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); ha aHandle 0 azutánkezdődik ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); ha Hozzárendelt (ARegFunc) azutánkezdődik ExecAndWait ('regsvr32', '/ s' + ocxPath); vég; FreeLibrary (aHandle); végén; kivéve ShowMessage (formátum ('Nem sikerült regisztrálni a% s', [ocxPath])); vég; vég;
Megjegyzés: a ocxPath változó mutat a 'Flash.ocx' Macromedia OCX-re.
Annak érdekében, hogy regisztrálhassa magát, az OCX-nek végre kell hajtania a DllRegisterServer funkciót, hogy regisztrációs bejegyzéseket hozzon létre az összes osztályon a vezérlőn. Ne aggódjon a DllRegisterServer funkció miatt, csak ellenőrizze, hogy ott van-e. Az egyszerűség kedvéért feltételezzük, hogy az OCX ugyanabban a mappában található, mint ahol az alkalmazás található.
A fenti kód ExecAndWait sora felhívja a regsvr32 eszközt azáltal, hogy átadja a "/ s" kapcsolót az OCX-hez vezető teljes útvonallal együtt. A függvény az ExecAndWait.
felhasználások ShellAPI;... funkció ExecAndWait (const ExecuteFile, ParamString: húr): logikai; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; kezdődik FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); val vel SEInfo kezdődik fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Alkalmazás. Fogantyú; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; ha ShellExecuteEx (@SEInfo) azutánkezdődikismétlés Alkalmazás. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); amíg (ExitCode STILL_ACTIVE) vagy alkalmazás. Lezárt; Eredmény: = true; végmás Eredmény: = false; vég;
Az ExecAndWait funkció a ShellExecuteEx API hívást használja a fájl végrehajtására egy rendszeren. A Delphiből származó fájlok végrehajtásának további példáit lásd: hogyan futtatni és futtatni az alkalmazásokat és fájlokat a Delphi kódból.
Flash.ocx A Delphi Exe belsejében
Ha szükség van egy ActiveX-vezérlő regisztrálására a felhasználó gépen, akkor ellenőrizze, hogy a felhasználó rendelkezik-e vele Az OCX programhoz az szükséges, hogy a teljes ActiveX-t (vagy DLL-t) az alkalmazás exe-jébe tegye forrás. Ha az OCX fájlt az exe fájlban tárolja, könnyen kivonható, menthető a lemezre, és felhívhatja a RegisterOCX eljárást.