Main Executable运行Launcher Executable,然后Launcher运行Main Executable

时间:2012-07-08 15:25:52

标签: delphi-2007

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

我想这样的原因只是因为,游戏启动器将用于更新游戏,然后在完成游戏开始时,人们将始终使用最新的up2date文件。

所以我想要的功能是: 我可以点击Main Executable或Launcher Executable打开Launcher Executable,然后当更新/下载完成时,Launcher将在用户点击Start按钮时启动Main Executable。

/感谢

1 个答案:

答案 0 :(得分:2)

让主要的可执行文件启动代码查找您选择的命令行参数。您可以使用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.