本文为原创,如需转载,请注明作者和出处,谢谢!

ShellExecute是windows的API函数,功能是执行可执行文件(exe)或任何关联文件(doc、txt、xls等)。但 ShellExecute是异步执行的,也就是说,不管执行的程序是否成功运行,运行的时间是长是短,ShellExecute函数都会立即返回。这样虽 然可以很好地完成执行程序的工作,但却会给后续的工作带来麻烦。
    例如,当调用bcp命令向sql server导入数据后,在DBGrid中显示这些导入的数据。如果使用ShellExecute来直接执行bcp命令,很可能会在数据未完全导入时显示DBGrid。这样就会造成数据显示不完整或根本显示不出来数据。
    要解决这个问题的方法就是使ShellExecute变成同步直接的,解决方法很多,例如,可以判断弹出的控制台窗口是否已关闭来确定bcp是否执行完。 但这样做还会有一些问题,例如,如果执行根本没有弹出窗口的程序,那这种方法就不起作用了。而本书给出了另一种比较通用的方法。基本原理是利用了批处理文 件的特性。虽然ShellExecute是异步执行的,但批处理是同步执行的,也就是在.bat、.cmd、.sh(linux/unix)中的命令是一 个接一个顺序执行的。因此,我们可以采用在批处理文件中调用bcp命令的方法来实现同步调用。也就是说,可以在调用bcp之前,先中当前目录中建立一个文 件或空目录,然后调用bcp,最后再删除这个文件或目录。这样可以通过判断文件或目录是否存在来确定bcp是否执行完成。为了确保在调用 ShellExecute之前文件一定存在,可以在调用ShellExecute之前在程序中建立一个文件,在批处理中删除这个文件。下面是一个批处理文 件的例子。

批处理文件名:bcp.cmd

set path = <bcp.exe的本地路径>/bcp.exe
bcp %1 in %2 %3 %4 其他命令行参数
del temp.txt

假设我们使用delphi来通过ShellExecute函数来运行bcp命令,代码如下:

FileCreate("temp.txt");
ShellExecute(,"bcp.cmd",,);
while true do
begin
   if temp.txt不存在 then
   begin 
      //  bcp已成功执行
       break;
   end;
end;

//  后续的处理代码

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2010/03/27/1698365.html如需转载请自行联系原作者

银河使者

判断ShellExecute函数是否执行完一个程序的方法相关推荐

  1. 如何判断线程池已经执行完所有任务了?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 很多场景下,我们需要等待线程池的所有任务都执行完,然后再进行下一步操作. ...

  2. 判断bat脚本已执行结束的一种方法

    在实际编码场景中,可能存在需要执行完bat脚本,才接着执行下面的代码,这个时候我们就需要判断bat脚本是否执行完毕.下面将给出一种解决方法: 可在bat脚本执行完毕后生成一个文件,然后通过监控这个文件 ...

  3. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  4. abapdata定义方法_ABAP中用函数定义后台作业的一个程序

    DATA: GLOBAL_JOB LIKE TBTCJOB. DATA: GLOBAL_START_DATE LIKE TBTCSTRT. DATA: GLOBAL_STEP_TBL LIKE TBT ...

  5. python判断字符是不是元音_编写一个程序来确定字符串python中有多少元音和辅音...

    下面的代码在python2.7.3上进行了测试.在你需要研究变量的作用域,你不能在一个方法中定义一个变量而在另一个方法中使用它. 研究一下从用户那里获取输入的最佳方法,sys是一个非常好的库 总是,总 ...

  6. python输入生日判断星座_用java编一个程序能通过用户输入的生日判断用户的星座。请大神们给点提示或者思路吧。规定不能自定义方法...

    既然不允许用其他的方式,那就直接上代码吧.... public static void main(String[] args) { int point = -1; String[] str = {&q ...

  7. 编写一个程序实现方法的覆盖java_编写Java程序代码必须先声明一个____,然后在其中编写实现需求的业务代码。...

    [多选题]下列关于多行注释的应用,正确的是( ) [单选题]是在思维中把对象分解为各个部分.侧面.属性以及阶段,分别加以考察的方法.(1.0分) [判断题]多行注释"/*...*/" ...

  8. android 编程一个程序实现方法,Android中一个应用实现多个图标的几种方式

    前言 最近因为新需求需要,我的应用将有多个ICON入口..最终选择了 activity-alias,其实实现多图标有好几种方式,下面就给大家总结下,分享出来供大家参考学习: 1. 多Activity ...

  9. c# ThreadPool 判断子线程全部执行完毕的四种方法

    1.先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可. using System; using System.Collections.G ...

最新文章

  1. excel python开发_Excel + Python = 威力无比
  2. 【青少年编程】【三级】计算成绩总和
  3. 交大c语言第二次作业答案,C语言程序设计第二次作业题及答案.doc
  4. 为什么说 Java 中只有值传递?
  5. java 定时删除_Java编写定时删除文件程序
  6. html中简单轮播图实现原理,常见轮播效果及其实现原理
  7. python怎么查询元素是否在列表中_python怎么判断某一元素是否在列表中
  8. struts-config message-resources配置问题总结
  9. 深度linux登录后界面卡死,Deepin Linux 15(.1)启动即卡死的问题
  10. 黑马程序员__用户禁用cookie后登录不成功的原因
  11. mongodb详细优化策略方案
  12. .NET环境下基于RBAC的访问控制
  13. c语言字符串拼接变量,C语言实现字符串拼接
  14. 大数据专业考研书_大数据考研
  15. Git正解 脱水版 【9. 其他VCS系统】
  16. 【PhotoShop基础B篇】准确控制曝光
  17. SSH 通过跳板机连接远程主机
  18. 检测域名微信屏蔽,检测微信域名屏蔽API
  19. 虚拟主机服务器架设,云虚拟主机架设服务器
  20. 机器人合肥乐博_乐博机器人编程——让机器人陪伴全国儿童成长

热门文章

  1. 华为手机拍照后图库里无照片_华为图库中上千张照片,如何快速找到想要的照片?...
  2. 多节锂电串联保护板ic_BMS电池管理系统与锂电池保护板的区别
  3. 神经网络模式识别matlab,基于matlab仿真的神经网络模式识别
  4. 怎么确定迭代器后面还有至少两个值_如何理解Python中的可迭代对象、迭代器和生成器
  5. 高效使用Google
  6. 全球及中国乳酸异辛酯行业发展趋势及投资前景规划报告2022-2027年
  7. 2022年跨境卖家如何布局海外市场?东南亚“钱”景可观
  8. 中国商业智能(BI)市场发展趋势及未来投资潜力评估报告2022-2028年版
  9. Windows10 家庭版添加【本地组策略编辑器】
  10. nyoj A+B Problem IV