MASM32编程用两种方法运行外部程序并等待其结束
来源:互联网 发布:淘宝供销平台在哪里 编辑:程序博客网 时间:2024/05/27 19:25
MASM32编程用两种方法运行外部程序并等待其结束
PurpleEndurer 原创
2009-06-08 第1版
在实现DelUninstall的卸载软件功能时,我们需要运行软件所指定的卸载程序,并等待其进程结束。
在用API函数WaitForSingleObject来等卸载程序进程结束时:
我们需要把进程句柄作为第一个参数传递给它。
要得到卸载程序运行时的进程句柄,我们至少有两个方法:
一、使用API函数ShellExecuteEx来运行卸载程序。
ShellExecuteEx的原型为:
其参数所指向的结构SHELLEXECUTEINFO定义为:
我们把卸载程序的命令行字符串首地址赋给SHELLEXECUTEINFO的成员lpFile,在调用成功后,在SHELLEXECUTEINFO的成员hProcess中保存着进程的句柄。
二、使用API函数CreateProcess来运行卸载程序。
CreateProcess的原型为:
我们把卸载程序的命令行字符串首地址传给第2个参数lpCommandLine,同时我们初始化一个STARTUPINFO结构变量和一个PROCESS_INFORMATION结构变量,并把其地址作为第9和第10个参数传递。
PROCESS_INFORMATION结构定义为:
调用成功后,进程句柄就存放在PROCESS_INFORMATION结构变量的成员hProcess中。
下面是DelUninstall中有关代码,当常量c_UseshlExec值为1时,我们使用ShellExecuteEx来实现,否则使用CreateProcess:
;lpszUnFile:卸载程序的命令行字符串首地址
UninstallA proc lpszUnFile: LPSTR
c_UseshlExec equ 1
if c_UseshlExec eq 1
local siExeInfo: SHELLEXECUTEINFO
else
local piProcInfo: PROCESS_INFORMATION
local siStartInfo: STARTUPINFO
endif ; c_UseshlExec
if c_UseshlExec eq 1
invoke RtlZeroMemory, addr siExeInfo, sizeof SHELLEXECUTEINFO
mov siExeInfo.cbSize, sizeof SHELLEXECUTEINFO
mov eax, lpszUnFile
mov siExeInfo.lpFile, eax
mov siExeInfo.fMask, SEE_MASK_NOCLOSEPROCESS
mov siExeInfo.nShow, SW_HIDE
invoke ShellExecuteEx, addr siExeInfo
test eax, eax
jz @F
invoke WaitForSingleObject, siExeInfo.hProcess, INFINITE
else ; c_UseshlExec
invoke RtlZeroMemory, addr siStartInfo, sizeof STARTUPINFO
invoke RtlZeroMemory, addr piProcInfo, sizeof PROCESS_INFORMATION
mov siStartInfo.cb, sizeof STARTUPINFO
xor ebx, ebx
invoke CreateProcess, ebx, lpszUnFile,/
ebx,/ ;process security attributes
ebx,/ ;primary thread security attributes
ebx,/ ;handles are inherited
ebx,/ ;creation flags
ebx,/ ;use parent's environment
ebx,/ ;use parent's current directory
addr siStartInfo,/;STARTUPINFO pointer
addr piProcInfo ;receives PROCESS_INFORMATION
invoke WaitForSingleObject, piProcInfo.hProcess, INFINITE
endif ;c_UseshlExec
.endif
@@:
ret
UninstallA endp
- MASM32编程用两种方法运行外部程序并等待其结束
- Delphi 调用外部程序并等待其运行结束
- Delphi 调用外部程序并等待其运行结束
- Delphi 调用外部程序并等待其运行结束
- Delphi调用外部程序并等待其运行结束
- Delphi 调用外部程序并等待其运行结束
- [delphi]调用外部程序并等待其运行结束
- 如何让Delphi调用外部程序并等待其运行结束
- 如何让Delphi调用外部程序并等待其运行信息(如结束)
- 如何让Delphi调用外部程序并等待其运行信息(如结束)
- windows运行一个程序并等待其结束。
- 运行程序并等待结束
- 启动外部程序并等待它结束
- 启动外部程序并等待它结束
- 启动外部程序并等待它结束
- 启动外部程序并等待它结束
- C++以阻塞的方式调用外部exe程序,等待其运行结束
- 怎样在PB中调用外部程序并判断其运行结束?
- 友情"只是偶然相逢"
- Oracle认证如何带来职涯蜕变?
- 个人讲解Oracle考试过程
- 信息化DIY成潮 管理软件迷你化和工具化
- PKU 2454 Set Operation
- MASM32编程用两种方法运行外部程序并等待其结束
- 100
- 大连软件行业概况
- 看CCTV5意甲20年有感——鄙视央视
- 做开发的,不知道xp sp哪个版本好用啊
- 第4章 感受(二)——4.7. Hello Database GUI版
- 我心目中的软件
- 我的明天是什么颜色的
- 网桥和路由器的区别