我该怎么做呢?
出于某种原因或由用户选择,“要求”当前应用程序自行重新启动它。
发布于 2011-05-17 01:14:12
uses ShellAPI;
...
procedure TForm1.RestartThisApp;
begin
ShellExecute(Handle, nil, PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL);
Application.Terminate; // or, if this is the main form, simply Close;
end;
发布于 2014-11-06 02:53:46
我可以添加到@Andreas Rejbrand的答案中:
如果代码在Application.Initialize.
之前在.dpr文件中执行,对于我来说,最好调用Halt(0)
而不是Application.Terminate
。我需要它,因为在第一次启动时,程序会执行一些安装,然后重新启动。如果我调用Application.Terminate
,main form会闪烁几秒钟(但根本不应该创建它!)然后应用程序关闭。所以我的代码如下:
project.dpr:
if FirstRun then
begin
DoFirstRunStuff();
ShellExecute(Application.Handle, nil, PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL);
Halt(0);
end;
...
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
发布于 2011-05-17 16:03:27
您可以有一个单独的简单restart.exe程序,它从您的程序中运行,并将可执行文件的名称传递给它。然后关闭你的程序。重新启动程序可以等待一段时间,或者直到可执行文件是可读写的(这似乎意味着它没有运行),然后它可以执行它并关闭它自己。
我希望有一种更好的方法来做到这一点,也许有人可以提供更好的解决方案,但这个函数似乎告诉我当前是否正在运行可执行文件:
function CanReadWriteFile(const f: TFileName): boolean;
var
i: integer;
begin
Result := false;
i := FileOpen(f, fmOpenReadWrite);
if i >= 0 then begin
Result := true;
FileClose(i);
end;
end;
https://stackoverflow.com/questions/6020867
复制相似问题