Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Lokalen COM-Server registrieren??? (https://www.delphipraxis.net/151742-lokalen-com-server-registrieren.html)

romber 30. Mai 2010 23:23


Lokalen COM-Server registrieren???
 
Hallo!

Ich habe in mein Projekt einen lokalen COM-Server eingebunden und möchte diesen registrieren. Wie mache ich das?

blackfin 30. Mai 2010 23:33

Re: Lokalen COM-Server registrieren???
 
Du willst die DLL registrieren?

Das geht z.B. so:
Delphi-Quellcode:
// Register a DLL
function RegisterDLL(dllname: string) : boolean ;
type
  TRegFunc = function : HResult; stdcall;
var
  ARegFunc : TRegFunc;
  aHandle : THandle;
  ocxPath : string;
begin
 try
  Result := true ;
  if DirectoryExists(ExtractFilePath(dllname))
  then ocxPath := dllname
  else ocxPath := ExtractFilePath(Application.ExeName) + dllname ;

  aHandle := LoadLibrary(PChar(ocxPath));
  if aHandle <> 0 then
  begin
    ARegFunc := GetProcAddress(aHandle,'DllRegisterServer');
    if Assigned(ARegFunc) then
    begin
      ExecAndWait('regsvr32','/s "' + ocxPath + '"');
    end;
    FreeLibrary(aHandle);
  end
  else
   Result := false ;
 except
  Result := false ;
 end;
end;


// Execute something and wait till finished
function ExecAndWait(const ExecuteFile : string; const ParamString : string = ''; const ExecWindowStatus: Integer = SW_NORMAL): boolean;
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    lpParameters := PChar(ParamString);
    nShow := ExecWindowStatus;
  end;
  if ShellExecuteEx(@SEInfo) then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
      sleep(1) ;
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
    Result:=True;
  end
  else Result:=False;
end;
Aufruf:

Delphi-Quellcode:
RegisterDLL(VollerPfadZuMeinerDLL);

romber 31. Mai 2010 00:05

Re: Lokalen COM-Server registrieren???
 
Vielen Dank für die schnelle Antwort!

Nein, das ist keine DLL, sondern eine ausführbare Datei, in die ein COM-Server integriert ist. Diesen Server möchte ich registrieren.

mkinzler 31. Mai 2010 06:42

Re: Lokalen COM-Server registrieren???
 
regsvr32 <Exename>

Uwe Raabe 31. Mai 2010 07:27

Re: Lokalen COM-Server registrieren???
 
Auf der Kommandozeile: <exename> /register

romber 31. Mai 2010 08:54

Re: Lokalen COM-Server registrieren???
 
Vielen Dank!

shmia 31. Mai 2010 16:38

Re: Lokalen COM-Server registrieren???
 
Zitat:

Zitat von romber
Nein, das ist keine DLL, sondern eine ausführbare Datei, in die ein COM-Server integriert ist. Diesen Server möchte ich registrieren.

Ausführbare Dateien (*.exe) lassen sich per Übergabeparameter registrieren:
Code:
C:\Test\> MeinProgramm.exe /regserver
Es sind Administratorrechte erforderlich!!
Der Parameter /register funktioniert (zumindest bei älteren Delphi Versionen) nicht.
Wenn man das Programm normal ohne Übergabeparameter startet wird ebenfalls eine Registrierung ausgeführt.
Der Parameter /regserver bewirkt also nur, dass das Programm nach der Registrierung beendet wird, bevor auch nur das Hautpformular sichtbar wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz