原文: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版本适用的更多相关文章

  1. Installshield停止操作系统进程的代码 --IS6及以上版本适用

    原文:Installshield停止操作系统进程的代码 --IS6及以上版本适用 setup.rul的代码 Code;end;///////////////////////////////////// ...

  2. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  3. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  4. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  5. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  6. 30个php操作redis常用方法代码例子

    From: http://www.jb51.net/article/51884.htm 这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型. ...

  7. php foreach 操作数组的代码

    php foreach 操作数组的代码.   foreach()有两种用法:  foreach(array_name as $value)  {  statement;  }  这里的array_na ...

  8. 30 个 php 操作 redis 常用方法代码例子

    这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类型. list 类型和 set 类型的数据 , 需要的朋友可以参 ...

  9. Linux操作系统进程模型分析进程

    Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...

随机推荐

  1. OAuth做webapi认证

    OAuth做webapi认证 看到园子里面有人写的OAuth,就想把自己实现的OAuth也分享一下,关于OAuth协议这里就不再赘述. 一.作为认证服务器,首先需要提供一个可以通过appid/apps ...

  2. android从中国天气网获取天气

    http://download.csdn.net/detail/sun6223508/8011669      里面的一切..可完全移植 版权声明:本文博主原创文章.博客,未经同意不得转载.

  3. Gradle sourceCompatibility has no effect to subprojects(转)

    I have Java 6 and 7 installed on my machine. Gradle uses 1.7 (checked using gradle -v). But I need t ...

  4. 初探boost之progress_display库学习笔记

    progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...

  5. iOS一个开发系列中 - UIButton 使用摘要

    // 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...

  6. 【MongoDB】Serveral common command of MongoDb

    In the recent days, since the overwork made me exhaused, on arrival to home I will go to bed, which ...

  7. Display Database Image using MS SQL Server 2008 Reporting Services

    原文 Display Database Image using MS SQL Server 2008 Reporting Services With the new release of MS SQL ...

  8. Node.js 开发指南笔记

    第一章:node简介 介绍了node是什么:node.js是一个让javascript运行在服务器端的开发平台, node能做些什么:[书上的] 具有复杂逻辑的网站 基于社交网络的大规模Web应用 W ...

  9. Learn Python More

    0, 看了一个python项目开源源码, 才知道现在这点python知识实在是弱爆了.. 尼玛就像学了2500个常用汉字, 然后要去理解"楚辞".. 代码如下, 解释一点一点从网上 ...

  10. Java得到的一周的最后一天的一段时间内

    Java得到的一周的最后一天的一段时间内 1.设计源代码 LastDayOfWeek.java: /** * @Title:LastDayOfWeek.java * @Package:com.you. ...