Installshield停止操作系统进程的代码--IS5版本适用
原文:Installshield停止操作系统进程的代码--IS5版本适用
出处:http://www.installsite.org/pages/en/isp_ext.htm
这个地址上有不少好东西,有空要好好研究下
里面的“List and Shut Down Running Applications”就是演示了Installshield如何停止操作系统进程
Code/**********************************************************************************/* GetRunningApp();/* ShutDownApp();/* /* These script created functions will look for any running application based on/* the file name, then display an error message within the Setup. You can optionally/* halt the install or just continue on./* /* You can use the ShutDownApp() function for shutting down that process or others/* as well. This is useful for processes that run in the background but have no Windows/* associated with them. May not work with Services./* /* This script calls functions in PSAPI.DLL that are not supported on Windows 95 or 98./* /* ***Instructions***/* Place these script peices into the Setup.rul file./* /* Modify the script to include the applications you would like to get or shutdown./* /* Submitted by William F. Snodgrass/* Contact info: bsnodgrass@geographix.com/* /* Created by Theron Welch, 3/3/99/* Minor modifications by Stefan Krueger, 11/03/99/* /* Copyright (c) 1999-2000 GeoGraphix, Inc. **********************************************************************************///////////////////// installation declarations ///////////////////// ----- DLL function prototypes -----// your DLL function prototypes // Custom function for shutting down MyApp processprototype ShutDownApp();// Custom function for shutting down any running applicationprototype GetRunningApp( BYREF STRING );///////////////////////////////////////////////////////////////////////////////////// Dll function calls needed// Kernel functionsprototype LONG Kernel32.OpenProcess( LONG, BOOL, LONG ); // 1ST Param = 2035711 for PROCESS_ALL_ACCESS (It pays to know hex!!), 2nd = Doesn't matter, 3rd = Process IDprototype BOOL Kernel32.TerminateProcess( LONG, INT ); // 1st Param = Process ID, 2nd = Doesn't matter - "0"// Process info functionsprototype LONG Psapi.EnumProcesses( POINTER, LONG, BYREF LONG ); // 1st Param = By ref, Process ID, 2nd = number of bytes in param 1 = "4", 3rd = cb needed - might as well be "4"prototype LONG Psapi.GetModuleFileNameExA( LONG, LONG, POINTER, LONG );// 1st Param = ProcessID, 2nd= Module ID, 3rd = pointer to a string, 4th = length of stringprototype LONG Psapi.EnumProcessModules( LONG, BYREF LONG, LONG, BYREF LONG ); // 1st Param = Process Handle, 2nd = Module Handle, 3rd = bytes passed ("4"), 4th = bytes needed ("4")///////////////////////////////////////////////////////////////////////////////////// your global variablesSTRING svAppprogram if ( 1 == GetRunningApp ( svApp ) ) then MessageBox ( "The installation has detected that " + svApp + " is running. " + "Please close " + svApp + " then restart the installation process.", SEVERE ); abort; endif; if ( 0 == ShutDownProjectManager() ) goto end_install; // This statement is within the Program block and jumps to the "end_install:" switch if the function fails. -WFS endprogram/////////////////////////////////////////////////////////////////////////////////////// Function: GetRunningApp//// Purpose: This function returns "1" if an app is running. Otherwise "0".// If "1" is returned, the "appName" parameter will contain the name of the // application running.//// Theron Welch 3/3/99/////////////////////////////////////////////////////////////////////////////////////function GetRunningApp( appName ) HWND hWnd; LONG ProcessIDs[ 512 ]; // An array that's hopefully big enough to hold all process IDs LONG cbNeeded; LONG cb; LONG numItems; LONG ProcessHandle; LONG ModuleHandle; LONG Count; LONG Ret; LONG Ret2; POINTER pArray; // This pointer will point at the array of process IDs STRING ModuleName[ 128 ]; STRING FileName[ 64 ]; POINTER pModuleName;begin UseDLL ( WINSYSDIR ^ "Psapi.dll" ); // Load the helper dll - PsApi.dll cbNeeded = 96; cb = 8; pArray = &ProcessIDs; // Point at the array while ( cb <= cbNeeded ) cb = cb * 2; EnumProcesses ( pArray, cb, cbNeeded ); // Get the currently running process IDs endwhile; numItems = cbNeeded / 4; // Calculate number of process IDs - 4 is the size in bytes of a Process ID (DWORD) for Count = 1 to numItems // For each process id ProcessHandle = OpenProcess ( 2035711, 1, ProcessIDs[ Count ] ); // Get a handle to the process if ( 0 != ProcessHandle ) then Ret = EnumProcessModules ( ProcessHandle, ModuleHandle, 4, cb ); // Get the module handle - first one is EXE, the one I care about! if ( 0 != Ret ) then pModuleName = &ModuleName; // Point at the array Ret = GetModuleFileNameExA ( ProcessHandle, ModuleHandle, pModuleName, 128 ); // Get the exe name if ( 0 != Ret ) then ParsePath ( FileName, ModuleName, FILENAME_ONLY ); // Convert the full path to a filename //////////////////////////////Outlook///////////////////////////////////////// // Copy the next 5 lines and customize for each app Ret = StrCompare ( FileName, "Outlook" ); if ( 0 == Ret ) then // If there's a match FileName = "Microsoft Outlook"; // Change to a name that makes sense appName = FileName; // Copy the filename to the passed in parameter (by ref) return 1; // Return "Found" endif; /////////////////////////////////////////////////////////////////////////////// //////////////////////////////Navwnt///////////////////////////////////////// Ret = StrCompare ( FileName, "Navwnt" ); if ( 0 == Ret ) then // If there's a match FileName = "Norton Anti-Virus"; // Change to a name that makes sense appName = FileName; // Copy the filename to the passed in parameter (by ref) return 1; // Return "Found" endif; /////////////////////////////////////////////////////////////////////////////// endif; endif; endif; endfor; return 0; // "Well, uh, apparently, no application is running"end;/////////////////////////////////////////////////////////////////////////////////////// Function: ShutDownApp//// Purpose: This function attempts to shut down the app you decide on. It returns// "1" if successful or if app is not running.// Otherwise "0" if it could not be shut down. Install should terminate// if "0" is returned.//// Theron Welch 3/3/99/////////////////////////////////////////////////////////////////////////////////////function ShutDownApp() HWND hWnd; LONG ProcessIDs[ 512 ]; // An array that's hopefully big enough to hold all process IDs LONG cbNeeded; LONG cb; LONG numItems; LONG ProcessHandle; LONG ModuleHandle; LONG Count; LONG Ret; LONG Ret2; POINTER pArray; // This pointer will point at the array of process IDs STRING ModuleName[ 128 ]; STRING FileName[ 64 ]; POINTER pModuleName;begin UseDLL ( WINSYSDIR ^ "Psapi.dll" ); // Load the helper dll - PsApi.dll cbNeeded = 96; cb = 8; pArray = &ProcessIDs; // Point at the array while ( cb <= cbNeeded ) cb = cb * 2; EnumProcesses ( pArray, cb, cbNeeded ); // Get the currently running process IDs endwhile; numItems = cbNeeded / 4; // Calculate number of process IDs - 4 is the size in bytes of a Process ID (DWORD) for Count = 1 to numItems // For each process id ProcessHandle = OpenProcess ( 2035711, 1, ProcessIDs[ Count ] ); // Get a handle to the process if ( 0 != ProcessHandle ) then Ret = EnumProcessModules ( ProcessHandle, ModuleHandle, 4, cb ); // Get the module handle - first one is EXE, the one I care about! if ( 0 != Ret ) then pModuleName = &ModuleName; // Point at the array Ret = GetModuleFileNameExA ( ProcessHandle, ModuleHandle, pModuleName, 128 ); // Get the exe name if ( 0 != Ret ) then ParsePath ( FileName, ModuleName, FILENAME ); // Convert the full path to a filename // MessageBox( FileName, INFORMATION ); Ret = StrCompare ( FileName, "MYAPP~1.EXE" ); // Compare filenames (used for short file names. -WFS) Ret2 = StrCompare ( FileName, "MYAPP.exe" ); // Compare filenames if ( 0 == Ret || 0 == Ret2 ) then // If it's the filename I'm looking for Ret = TerminateProcess( ProcessHandle, 0 ); // Terminate the process if ( 0 == Ret ) then goto Error; endif; goto Quit; endif; endif; endif; endif; endfor; Quit: UnUseDLL ( "Psapi.dll" ); // Unload the helper dll - PsApi.dll return 1; // Happy Error: UnUseDLL ( "Psapi.dll" ); // Unload the helper dll - PsApi.dll return 0; // Sadend;
Installshield停止操作系统进程的代码--IS5版本适用的更多相关文章
- Installshield停止操作系统进程的代码 --IS6及以上版本适用
原文:Installshield停止操作系统进程的代码 --IS6及以上版本适用 setup.rul的代码 Code;end;///////////////////////////////////// ...
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- 全面吃透JAVA Stream流操作,让代码更加的优雅
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...
- SELECT控件操作的JS代码示例
SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...
- 30个php操作redis常用方法代码例子
From: http://www.jb51.net/article/51884.htm 这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型. ...
- php foreach 操作数组的代码
php foreach 操作数组的代码. foreach()有两种用法: foreach(array_name as $value) { statement; } 这里的array_na ...
- 30 个 php 操作 redis 常用方法代码例子
这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类型. list 类型和 set 类型的数据 , 需要的朋友可以参 ...
- Linux操作系统进程模型分析进程
Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...
随机推荐
- 关于苹果公司最新的语言Swift
Swift供IOS和OSX新的编程语言开发的应用程序,吸取C和Objective-C质朴的语言.但没有损失C兼容性语言.Swift使用安全的编程模型.增加各种现代编程语言功能,使语言更容易掌握.更具可 ...
- Android手机定位技术的发展
基于以下三种方式的移动位置:1. 网络位置 :2. 基站定位. 3. GPS定位 1 网络位置 前提是连接到网络:Wifi.3G.2G 到达IP址 比如:彩虹版QQ,珊瑚虫版QQ,就有一个功能显示对 ...
- Ignite China微软技术
首届Ignite China微软技术大会见闻 10.26-10.28,有幸参加微软在中国北京举办的首届Ignite China技术大会.世界那么大,技术那么多,我想去看看. 为期三天的技术大会在小 ...
- VS2012 安装出错 :通道正在关闭
从微软官网下的安装包iso,解压后安装时总是出现 3个错误,提示什么管道正在关闭,看了很多解决办法,挑了一个简单的:安装包有问题,重新下载一个,就好了(持续更新....)
- wxWidgets+wxSmith版电子词典
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...
- Linux服务器杀马(转)
开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...
- iOS发展系列II - UILabel 使用摘要
// 初始化标签 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 150)]; // 设置标签文字 l ...
- 创建线程的两种方式:继承Thread类和实现Runnable接口
第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...
- CSS3实现Tooltip提示框飞入飞出动画
原文:CSS3实现Tooltip提示框飞入飞出动画 我们见过很多利用背景图片制作的Tooltip提示框,但是缺点是扩展比较麻烦,要经常改动图片.还有就是利用多层CSS的叠加实现,但是效果比较生硬,外观 ...
- BMP图片转换为JPEG图片
原文:BMP图片转换为JPEG图片 昨天在家学习,发现很多人把BMP图片转换为其它图片格式,有些人写得简单,有些人写得复杂. Insus.NET在想,一直在做文件上传,下载,或是图片剪切,都有进行过文 ...