一个有趣的问题-程序自身重启
写了段代码转成EXE文件,我们先假设这个EXE文件为:1.exe,该EXE文件最后有一个代码是:ProcessClose("1.exe")
Run (@ScriptDir &"\1.exe")
意思是结束1.exe,再重启1.exe。现在的问题是因为这个1.exe已经被自己结束了,也就是ProcessClose("1.exe"),所以根本不会去执行Run (@ScriptDir &"\1.exe"),所以无论如何这个代码只能是运行到结束1.exe这个进程后就中止了,不能支重启1.exe了。
请问如何解决这一问题?让他可以自已重启。
[ 本帖最后由 charson 于 2008-11-1 11:43 编辑 ] 另外再写一个执行 1.exe 的程序(run1.exe)。
run1.exe 头部最好 sleep 1、2 秒钟
Run (@ScriptDir &"\run1.exe")
ProcessClose("1.exe") 写个自删除的vbs呗 bat 也行呀,看你想怎么玩了 大家的思路都是另写一个BAT或VBS或AU3来执行重启任务,自身执行重启真的不可能完成吗? api?不过是不是会很麻烦,问问snow,三恨等人
[ 本帖最后由 netegg 于 2008-10-27 11:33 编辑 ] 思路是在OnAutoItExit函数中使用at命令, 让系统在下一秒钟调用自身这个exe.
关于时间的计算自己想想
at /?
AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。
AT [\\computername] [ | /DELETE ]
AT [\\computername] time
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername 指定远程计算机。 如果省略这个参数, 会计划在本地计算机上运行命令。
id 指定给已计划命令的识别号。
/delete 删除某个已计划的命令。如果省略 id, 计算机上所有已计划的命令都会被删除。
/yes 不需要进一步确认时,跟删除所有作业的命令一起使用。
time 指定运行命令的时间。
/interactive 允许作业在运行时,与当时登录的用户桌面进行交互。
/every:date[,...] 每个月或每个星期在指定的日期运行命令。如果省略日期,则默认为在每月的
本日运行。
/next:date[,...] 指定在下一个指定日期(如,下周四)运行命令。如果省略日期,则默认为在每
月的本日运行。
"command" 准备运行的 Windows NT 命令或批处理程序。 这样试试,获取进程的路径就好办了,at是内部命令吗,好像不是吧(是不是需要外部文件) 原帖由 netegg 于 2008-10-27 12:36 发表 http://www.autoitx.com/images/common/back.gif
这样试试,获取进程的路径就好办了,at是内部命令吗,好像不是吧(是不是需要外部文件)
at是windows的设置计划服务的命令, 在自身程序已结束返回的情况下, 自身进程已死, 要通过windows系统来调度程序再次执行了.
RunWait(@ComSpec & " /c " & "at...") 用双进程也可以 Run(@ComSpec&' /c ping 127.0.0.1 -n 3&'"@ScriptFullPath"'&exit',@SystemDir,@SW_HIDE) 程序自身重启的意义何在??
如果需要重运行程序的哪部分代码,可以完全重运行这部分代码,没必要重运行程序自身
这个是在程序设计阶段要解决的问题,不应该以这种方式解决 MsgBox(0,"",@ComSpec)
ShellExecute(@ComSpec," /c ping 127.0.0.1 -n 3&start "&FileGetShortName(@AutoItExe),"","",@SW_HIDE)
ProcessClose(@ScriptName)
你要的是这个吧 MsgBox(0,"",@ComSpec)
ShellExecute(@AutoItExe)
ProcessClose(@ScriptName)
这样子写更简单 先run后exit就可以了,在子程序的“防止多开”代码执行前,父进程就退出了
此问题已解决。
页:
[1]
2