如何让一个程序自己重新启动自己?(100分)

  • 主题发起人 主题发起人 decade
  • 开始时间 开始时间
D

decade

Unregistered / Unconfirmed
GUEST, unregistred user!
我想让一个程序自己启动自己,如何实现?<br>我用了以下代码测试,但仅仅能实现一次,在新生成的的程序了,功能就失效。<br>ShellExecute(handle, &nbsp;'open','../project1.exe',nil, &nbsp;'', &nbsp;SW_SHOWNORMAL);<br>application.Terminate ;
 
你用绝对路径吧<br><br>你的路径是空,第二次起来就有问题了
 
我用close 代替 application.Terminate 关闭,打开可以,但关闭就不能了。
 
unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls,shellapi;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; aDir : string;<br>begin<br>&nbsp; GetDir(0,aDir);<br>&nbsp; ShellExecute(handle, &nbsp;'open',PChar(aDir+'/project1.exe'),nil, &nbsp;'', &nbsp;SW_SHOWNORMAL);<br>&nbsp; application.Terminate ;<br>end;<br><br>end.
 
谢谢两位!
 
给我分啊。
 
用ShellExecute是不要用open最好用 nil<br>ShellExecute(handle, &nbsp;'open','../project1.exe',nil, &nbsp;'', &nbsp;SW_SHOWNORMAL);
 
用线程 <br><br>参照异常进程自动激活 一文
 
ShellExecute(handle, &nbsp;'open',pchar(application.ExeName),nil, &nbsp;'', &nbsp;SW_SHOWNORMAL);<br>
 
要用两条语句:<br><br>ShellExecute(Handle, 'Open',Pchar(Application.ExeName),nil,'',SW_SHOWNORMAL);<br>SendMessage(Handle,WM_CLOSE,0,0);<br>
 
用cmdLine最简单了,这也是最正确的<br>WinExec(cmdLine,xxxx)
 
ShellExecute 的时候参数有一个似乎是path ?!<br>记不清了,但是有点这样的印象。平时搞其他的,不需要传递路径参数,<br>其实,为了安全,除了不知道或系统的程序外,调用其他的,都应该指明。
 
ShellExecute的参数里边关于所要运行的命令其实分为三个的:<br>一个是可执行文件名,一个是可执行文件的路径,另一个是参数。<br>很多人都没有注意到这一点,所以在调用时,可能会出现意外的情况。<br>具体可以查一下MSDN,写得很清楚的。
 
谢谢各位的帮助,上次忘记了分分,现在给你们分。
 
多人接受答案了。
 
后退
顶部