VB 执行一个bat再Kill问题
想法就是产生一个bat然后再执行,最后删除这个临时产生的文件那么Shell"C:\test.bat",vbHideKill"C:\test.bat"如果说bat执行的内容...
想法就是产生一个bat然后再执行,最后删除这个临时产生的文件
那么
Shell "C:\test.bat", vbHide
Kill "C:\test.bat"
如果说 bat执行的内容少,肯定一下就结束了,这时把kill就没事了
那么如果说bat执行的内容多的话,
这个程序是等shell里的bat执行完才kill,还是会马上就kill 展开
那么
Shell "C:\test.bat", vbHide
Kill "C:\test.bat"
如果说 bat执行的内容少,肯定一下就结束了,这时把kill就没事了
那么如果说bat执行的内容多的话,
这个程序是等shell里的bat执行完才kill,还是会马上就kill 展开
3个回答
展开全部
shell是异步运行的,就是说它运行后并不会等里面的bat执行完毕,而是立刻就继续执行下面的其他语句,也就是说bat会立刻被kill的。
bat属于类脚本程序,它在运行期间其他软件是可以把它删除的(而EXE文件则是不行的),多数情况下不会出错,因为它在启动的时候就已经被整体调入内存了,此后它就按照内存中的副本来解析运行了,硬盘中的原文件是否存在就关系不大了,但有时候也会出错的,尤其是内容比较多的时候。
解决办法有两种:
一是要等bat完全执行完毕才执行kill。这又有多种方法实现,比如通过API函数来检测shell的进程ID,如果该ID存在就说明bat还没有运行完毕,这样通过循环检测直到ID为0才执行kill。还有一种比较巧妙的方法是不用shell,而是改用Wscript的run,因为它可以实现同步运行,比如:
CreateObject("Wscript.Shell").Run "C:\test.bat", 0, True
Kill "C:\test.bat"
二是不在VB中删除bat文件,而是在bat文件中删除自身,比如在bat的最后添加一行:
del %0%
或者
del "C:\test.bat"
请注意这个一定要放在最后一行!
bat属于类脚本程序,它在运行期间其他软件是可以把它删除的(而EXE文件则是不行的),多数情况下不会出错,因为它在启动的时候就已经被整体调入内存了,此后它就按照内存中的副本来解析运行了,硬盘中的原文件是否存在就关系不大了,但有时候也会出错的,尤其是内容比较多的时候。
解决办法有两种:
一是要等bat完全执行完毕才执行kill。这又有多种方法实现,比如通过API函数来检测shell的进程ID,如果该ID存在就说明bat还没有运行完毕,这样通过循环检测直到ID为0才执行kill。还有一种比较巧妙的方法是不用shell,而是改用Wscript的run,因为它可以实现同步运行,比如:
CreateObject("Wscript.Shell").Run "C:\test.bat", 0, True
Kill "C:\test.bat"
二是不在VB中删除bat文件,而是在bat文件中删除自身,比如在bat的最后添加一行:
del %0%
或者
del "C:\test.bat"
请注意这个一定要放在最后一行!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询