如何让程序自己运行两次(50分)

  • 主题发起人 主题发起人 a_ping
  • 开始时间 开始时间
A

a_ping

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个程序,第一次运行总有些错误,但第二次就没问题了,我现在还没法立马搞定,但人家要的急,我想让程序第一次运行后自动关闭,并再启动一次,该怎么做呢?
 
批处理咋写?加在程序里?
 
你直接调用不成吗,然后在关闭自己
 
procedure TForm1.FormShow(Sender: TObject);
var
list:TStrings;
begin
list:=TStringlist.create;
if(FileExists(ExtractFilePath(Application.exename)+'fm.txt')=false) then
begin
close;
list.saveTofile(ExtractFilePath(Application.exename)+'fm.txt');
ShellExecute(handle, pchar('open'), pchar(Application.exename), pchar(''), pchar(''), SW_SHOWNORMAL);
end else
begin
deletefile(ExtractFilePath(Application.exename)+'fm.txt');
end;
end;

uses
shellapi
 
补充:调用时候带个参数,程序好判断是不是被掉用的
 
問題真怪?? 為什麼第2之運行會沒事??
 
ShellExecute或者winexec都是可以的,具体用法看帮助。
退出就不用说了。
不过你的解决办法倒是满有创意的呀!
真有你说的这问题吗?
 
这不是给逼急了吗?我用的一个控件就这毛病,还就在98下有这种问题,XP和2000都好的,郁闷!还没时间研究代码!哎!只能先这么搞了
 
叫直观的就是另做一个守护程序。
先让被控方执行一次,杀。
再执行一次,一个循环一个变量就搞定了。
不过问题可真奇怪。都是问“怎样让程序只执行一次”。而你...
 
看来真的只能做个守护程序了,真郁闷阿
 
呵呵,有创意
 
这样可以:
program Project1;

uses
Forms,
windows,
.....;

Resourcestring
FMutex = 'Mutex_ONLY_ONE';
{$R *.RES}
var
hMutex: HWND;
iRet: integer;
begin
Application.Initialize;
hMutex := CreateMutex(nil,False,PChar(FMutex));//建立
iRet := GetLastError;
if iRet <>ERROR_ALREADY_EXISTS then //成功建立,说明是第一次
begin
winexec(ParamStr(0),sw_show); //再次运行自己
Application.Terminate; //停止自己
end
else //否则是第二次以上
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
ReleaseMutex(hMutex); //释放
end;
end.
 
在您想开始重新启动此程序时候(即第2次时候),您可以用和我上面的类似的代码。。
即利用创建互斥变量成功与否,判断之前是否已经运行过。。。 :)
比如,您可以把上面代码放到onCreate中,
或者,用一个计时器,第一次运行时候,经过多少时间重新开一次。。
 
多人接受答案了。
 
后退
顶部