我有两个.exe程序,一个是游戏启动器,另一个是主要可执行文件。如果有人去打开它,我将如何让我的主要可执行文件运行游戏启动器。这将与.dpr文件和一些Windows API有关,我猜不知道从哪里开始说实话。
我想这样的原因只是因为,游戏启动器将用于更新游戏,然后在完成游戏开始时,人们将始终使用最新的up2date文件。
所以我想要的功能是: 我可以点击Main Executable或Launcher Executable打开Launcher Executable,然后当更新/下载完成时,Launcher将在用户点击Start按钮时启动Main Executable。
/感谢
答案 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.