使用installshield12制作的安装包在卸载时杀死正在运行的程序
来源:互联网 发布:python 网络框架 编辑:程序博客网 时间:2024/05/21 17:49
最近工作项目需求,要用installshield12制作安装包,实现安装注册ATL控件。与ATL一同安装的程序文件还有两个客户端,这两个客户端和迅雷等下载工具类似是在后台运行的,并没有界面显示,所以一般情况下再用户进行卸载的时候这两个程序都会在运行。然而,installshield本身并没有强制关闭正在运行的要卸载的程序。那么,只有自己处理了。
方法一:首先在Installation Designer页面的Behavior and Logic中单击InstallScript,右击Files在弹出的快捷菜单中选择New Script file,然后新建相关函数。写脚本:
#define WINDOW "11.exe"
function OnUninstallingFile(szFile)
HWND hWnd;
begin
hWnd = FindWindow (WINDOW, "");
if (hWnd != NULL) then
Delay (3);
SendMessage(hWnd, 0x0111, 32775, 0);
Delay (3);
endif;
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBDeleteValue("//SOFTWARE//Microsoft//Windows//CurrentVersion//Run","11");
end;
然后再在Behavior and Logic中单击Custom Actions, 右击Custom Actions在弹出的快捷菜单中选择Custom Action Wizard在Action Type中选择Run InstallScript code,在Insert into Sequence中的Install Execute Sequence处选择After ISSelRegisterFinalize或者After InstallFinalize都行,其余按向导提示操作。
以上只是个例子,思路就是找到运行的程序的窗口句柄,发消息通知其退出,此种方法只能针对有窗口的程序。
方法二:
编写一段VC代码,写出dll文件,加到安装文件里,用custom action来调用,就可以了。调用处和方法一相同,细节调整下就可以了。
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
HANDLE hProcess;
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
BOOL bNext=Process32First(hSnap, &pe);
while(bNext)
{
if(_tcsicmp(pe.szExeFile, TEXT("执行档名称")) == 0)
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
TerminateProcess(hProcess, 0);
}
bNext=Process32Next(hSnap, &pe);
}
CloseHandle(hProcess);
CloseHandle(hSnap);
同样的方法也可以用于删除卸载残留的一些文件。
呵呵,简短的语句可能说得不够清楚,大概的思路有了,细节处还是要根据需求灵活的实现。
- 使用installshield12制作的安装包在卸载时杀死正在运行的程序
- 利用InstallShield12制作安装包之一:认识InstallShield12
- 利用InstallShield12制作安装包之二:利用InstallScript脚本进行最基本的编程
- 利用InstallShield12制作安装包之三:判断操作系统类型的多种方法
- InstallShield12的静默安装
- Inno Setup安装、卸载时判断是否程序正在运行,安装完成时自动打开网页的脚本
- Inno Setup安装、卸载时判断是否程序正在运行,安装完成时自动打开网页的脚本
- Inno Setup安装、卸载时判断是否程序正在运行,安装完成时自动打开网页的脚本
- Inno Setup安装、卸载时判断是否程序正在运行
- Inno Setup安装、卸载时判断是否程序正在运行
- Inno Setup安装、卸载时判断是否程序正在运行
- Inno Setup安装、卸载时判断是否程序正在运行
- Android杀死正在运行的进程
- NSIS制作的安装包杀掉正在运行进程的方法
- installshiled 安装包制作-设置为安装后运行及卸载时先关闭程序然后卸载
- 使用gdb调试正在运行的程序
- 在Inno Setup制作的安装包中利用Pascal脚本检查安装,卸载前检查程序是否已经启动 [转载]
- VS2005或2008在制作的安装包中添加卸载功能
- (二十四)优秀员工 - 3
- 软件工程师学习
- (二十四)优秀员工 - 4
- 童装四季销售进货经验谈
- C++惯用法:metafunction(元函数)
- 使用installshield12制作的安装包在卸载时杀死正在运行的程序
- (二十四)优秀员工 - 5
- 如何直接转换系统分区格式
- $CSL 我要看中超
- flex 制作QQ表情
- PHP的前途
- socket编程原理
- MSSQL插入数据分析受影响的表
- 个人怎样改变世界