Delphi 2007 主可执行文件运行Launcher可执行文件,然后Launcher运行主可执行文件

Delphi 2007 主可执行文件运行Launcher可执行文件,然后Launcher运行主可执行文件,delphi-2007,Delphi 2007,我有两个.exe程序,一个是游戏启动程序,另一个是主可执行程序。如果有人打开游戏启动器,我将如何让我的主可执行文件运行它。这可能与.dpr文件和一些Windows API有关,老实说,我猜只是不确定从哪里开始 我之所以希望如此,原因很简单,游戏启动器将用于更新游戏,然后在完成后启动游戏,因此人们将始终使用最新的文件 因此,我也希望需要的功能是: 我可以单击主可执行文件或启动器可执行文件,两者都将打开启动器可执行文件,然后当更新/下载完成时,当用户单击开始按钮时,启动器将启动主可执行文件 /谢谢让

我有两个.exe程序,一个是游戏启动程序,另一个是主可执行程序。如果有人打开游戏启动器,我将如何让我的主可执行文件运行它。这可能与.dpr文件和一些Windows API有关,老实说,我猜只是不确定从哪里开始

我之所以希望如此,原因很简单,游戏启动器将用于更新游戏,然后在完成后启动游戏,因此人们将始终使用最新的文件

因此,我也希望需要的功能是: 我可以单击主可执行文件或启动器可执行文件,两者都将打开启动器可执行文件,然后当更新/下载完成时,当用户单击开始按钮时,启动器将启动主可执行文件


/谢谢

让主可执行文件启动代码查找您选择的命令行参数。为此,您可以使用RTL的
FindCmdLineSwitch()
函数。如果参数存在,则正常运行游戏。否则,请使用Win32
CreateProcess()
函数运行启动程序可执行文件,然后退出自身。当启动器准备就绪时,它可以使用
CreateProcess()
函数运行主可执行文件,并将命令行参数传递给它以运行游戏

例如:

Main.dpr:

Var
  SI: TStrartupInfo;
  PI: TProcessInformation;
Begin
  If not FindCmdLineSwitch('RunGameNow') then
  Begin
    ZeroMemory(@SI, SizeOf(SI));
    SI.cbSize := SizeOf(SI);
    ...
    If CreateProcess(nil, 'launcher.exe', nil, nil, False, 0, nil, nil, @SI, @PI) then
    Begin
     CloseHandle(PI.hThread);
     CloseHandle(PI.hProcess); 
    End;
    Exit;
  End;
  ... Run game normally...
End.
Launcher.dpr:

Begin
  ...
  CreateProcess(nil, 'main.exe /RunGameNow', nil, nil, False, 0, nil, nil, @SI, @PI)
  ...
End.

谢谢,接受。现在只需要检查所有与这些相关的信息。附言:很抱歉回复晚了。