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

setup.rul的代码

Code//////////////////////////////////////////////////////////////////////////////////                                                                            //  IIIIIII SSSSSS                                                            //    II    SS                          InstallShield (R)                     //    II    SSSSSS      (c) 1996-2000, InstallShield Software Corporation     //    II        SS      (c) 1990-1996, InstallShield Corporation              //  IIIIIII SSSSSS                     All Rights Reserved.                   //                                                                            //                                                                            //  This code is generated as a starting setup template.  You should   //  modify it to provide all necessary steps for your setup.//                                                                            //                                                                            //    File Name:  Setup.rul                                                   //                                                                            //  Description:  InstallShield script                                        //                                                                            //     Comments:  This template script performs a basic setup. With minor           //                modifications, this template can be adapted to create       //                new, customized setups.//////////////////////////////////////////////////////////////////////////////////// Include header files    #include "ifx.h" //DO NOT REMOVE////////////////////// string defines //////////////////////////////////////////////// installation declarations ///////////////////// ----- DLL function prototypes -----    // your DLL function prototypes#include "ShutDownRunningApp.rul"    // ---- script function prototypes -----    // your script function prototypes    // your global variables////////////////////////////////////////////////////////////////////////////////                                                                           //  FUNCTION:   OnFirstUIBefore                                            //                                                                           //  EVENT:      FirstUIBefore event is sent when installation is run for the first//              time on given machine. In the handler installation usually displays//              UI allowing end user to specify installation parameters. After this//              function returns, ComponentTransferData is called to perform file//              transfer.//                                                                           ///////////////////////////////////////////////////////////////////////////////function OnFirstUIBefore()    NUMBER  nResult,nSetupType;    STRING  szTitle, szMsg;begin        if ProcessRunning("notepad") then        MessageBox("Application is running.", INFORMATION);        ProcessEnd("notepad");                Delay(2);  // Delay to allow process list to refresh                if ProcessRunning("notepad") then            MessageBox("Application is running.", INFORMATION);        else            MessageBox("Application is not running.", INFORMATION);        endif;    else        MessageBox("Application is not running.", INFORMATION);    endif;    abort;    // TO DO: if you want to enable background, window title, and caption bar title                                                                         // SetTitle( @TITLE_MAIN, 24, WHITE );                                            // SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION );                            // Enable( FULLWINDOWMODE );                               // Enable( BACKGROUND );                                  // SetColor(BACKGROUND,RGB (0, 128, 128));                              TARGETDIR = PROGRAMFILES ^@COMPANY_NAME ^@PRODUCT_NAME;    Dlg_Start:    // beginning of dialogs labelDlg_ObjDialogs:    nResult = ShowObjWizardPages(nResult);    if (nResult = BACK) goto Dlg_Start;        // setup default status    SetStatusWindow(0, "");    Enable(STATUSEX);    StatusUpdate(ON, 100);    return 0;end;//////////////////////////////////////////////////////////////////////////////////  FUNCTION:   OnFirstUIAfter////  EVENT:      FirstUIAfter event is sent after file transfer, when installation //              is run for the first time on given machine. In this event handler //              installation usually displays UI that will inform end user that//              installation has been completed successfully./////////////////////////////////////////////////////////////////////////////////function OnFirstUIAfter()begin    Disable(STATUSEX);    ShowObjWizardPages(NEXT);                                               end;///////////////////////////////////////////////////////////////////////////////////  FUNCTION:   OnMaintUIAfter////  EVENT:      MaintUIAfter event is sent after file transfer, when end user runs //              installation that has already been installed on the machine. Usually //              this happens through Add/Remove Programs applet. //              In the handler installation usually displays UI that will inform //              end user that maintenance/uninstallation has been completed successfully./////////////////////////////////////////////////////////////////////////////////function OnMaintUIAfter()begin    Disable(STATUSEX);                                                   ShowObjWizardPages(NEXT);end;///////////////////////////////////////////////////////////////////////////////////  FUNCTION:   OnMoving////  EVENT:      Moving event is sent when file transfer is started as a result of//              ComponentTransferData call, before any file transfer operations //              are performed./////////////////////////////////////////////////////////////////////////////////function OnMoving()    STRING szAppPath;begin    // Set LOGO Compliance Application Path     // TO DO : if your application .exe is in a subfolder of TARGETDIR then add subfolder     szAppPath = TARGETDIR;    RegDBSetItem(REGDB_APPPATH, szAppPath);    RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY);end;// --- include script file section ---

ShutDownRunningApp.rul的代码

Code////////////////////////////////////////////////////////////////////////////////// Description: Windows NT process control functions.////              The process code is adapted from code posted by William F.//              Snodgrass to www.installsite.org. The original code header//              is appended below. The array code is adapted from code posted//              by Rajesh Ramachandran to the installshield.is6.installscript//              newsgroup.// // Submitted by Richard Iwasa (riwasa@email.com).//// Usage example://// if ProcessRunning("notepad") then//        MessageBox("Application is running.", INFORMATION);////        ProcessEnd("notepad");//        //      Delay(2);  // Delay to allow process list to refresh//        //        if ProcessRunning("notepad") then//            MessageBox("Application is running.", INFORMATION);//        else//            MessageBox("Application is not running.", INFORMATION);//        endif;//    else//        MessageBox("Application is not running.", INFORMATION);//    endif;//// Original code header appended below://// 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. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function prototypes./////////////////////////////////////////////////prototype POINTER ArrayToPointer(BYREF VARIANT);prototype NUMBER  ProcessEnd(STRING);prototype BOOL    ProcessRunning(STRING);// Kernel functions.prototype NUMBER Kernel32.OpenProcess(NUMBER, BOOL, NUMBER);prototype NUMBER Kernel32.TerminateProcess(NUMBER, NUMBER);// Process information functions.prototype NUMBER PSAPI.EnumProcesses(POINTER, NUMBER, BYREF NUMBER);prototype NUMBER PSAPI.EnumProcessModules(NUMBER, BYREF NUMBER, NUMBER,        BYREF NUMBER);prototype NUMBER PSAPI.GetModuleFileNameExA(NUMBER, NUMBER, BYREF STRING,        NUMBER);/////////////////////////////////////////////////// Structures./////////////////////////////////////////////////// Structure to mirror the C/C++ SAFEARRAY data structure.typedef _SAFEARRAYbegin    SHORT   cDims;    SHORT   fFeatures;    LONG    cbElements;    LONG    cLocks;    POINTER pvData;    // rgsaBound omittedend;// Structure to mirror the C/C++ VARIANT data structure.typedef _VARIANTbegin    SHORT  vt;    SHORT  wReserver1;    SHORT  wReserved2;    SHORT  wReserved3;    NUMBER nData;end;        /////////////////////////////////////////////////// Constants./////////////////////////////////////////////////#define PSAPI_FILE        "psapi.dll"  // Windows NT process DLL#define PROCESSID_LENGTH  4            // 4 bytes (DWORD) for a process ID// Process information constants.#define PROCESS_QUERY_INFORMATION  0x400#define PROCESS_ALL_ACCESS         0x1f0fff#define PROCESS_VM_READ            0x10////////////////////////////////////////////////////////////////////////////////// Function:    ArrayToPointer//// Description: Converts an InstallShield array into a C array.////              When an array is created in InstallScript, a VARIANT variable//              is created which holds an OLEAutomation SAFEARRAY. To pass//              such an array to a DLL function expecting a C-style array,//              this function explicitly typecasts the pointer to the array//              to a _VARIANT pointer so that the _SAFEARRAY pointer can be//              extracted. The pointer to the actual data is then extracted//              from the _SAFEARRAY pointer.//// Parameters:  structArray - Array variable.//// Returns:     POINTER - Pointer to array.////////////////////////////////////////////////////////////////////////////////function POINTER ArrayToPointer(structArray)    _SAFEARRAY POINTER pstructArray;    // _SAFEARRAY array pointer    _VARIANT   POINTER pstructVariant;  // _VARIANT array pointerbegin    // Typecast the pointer to the array to a _VARIANT pointer.        pstructVariant = &structArray;        // Extract the _SAFEARRAY pointer from the _VARIANT.        pstructArray = pstructVariant->nData;        // Return the pointer to the actual data from the _SAFEARRAY.        return pstructArray->pvData;end;////////////////////////////////////////////////////////////////////////////////// Function:    _Process_End//// Description: Terminates running processes for the specified application.//// Parameters:  szAppName - Name of the application to terminate.//// Returns:     >= 0 - Number of processes terminated.//                -1 - Failure.////////////////////////////////////////////////////////////////////////////////function NUMBER ProcessEnd(szAppName)    NUMBER  nvReturn;           // Number of processes terminated    NUMBER  nvProcessIDs(512);  // Array of process IDs    NUMBER  nvBytesReturned;    // Number of bytes returned in process ID array    NUMBER  nvProcesses;        // Number of processes running    NUMBER  nvIndex;            // Loop index    NUMBER  nvProcessHandle;    // Handle to a process    NUMBER  nvModuleHandle;     // Handle to a process module    NUMBER  nvBytesRequired;    // Number of bytes required to store values    POINTER pvProcessIDs;       // Pointer to process ID array    STRING  svModuleName;       // Module name    STRING  svFileName;         // Module filename begin    // The psapi.dll reads the Windows NT performance database. The DLL    // is part of the Win32 SDK.        if UseDLL(WINSYSDIR ^ PSAPI_FILE) < 0 then        // Could not load psapi.dll.                MessageBox("ERROR: Could not load [" + WINSYSDIR ^ PSAPI_FILE +                "].", SEVERE);                return -1;    endif;        // Get the PIDs of all currently running processes.        pvProcessIDs = ArrayToPointer(nvProcessIDs);    EnumProcesses(pvProcessIDs, 512, nvBytesReturned);    // Determine the number of process IDs retrieved. Each process ID    // is PROCESSID_LENGTH bytes.        nvProcesses = nvBytesReturned / PROCESSID_LENGTH;        // Get the executable associated with each process, and check if    // its filename matches the one passed to the function.        for nvIndex = 1 to nvProcesses        // Get a handle to the process. The OpenProcess function        // must have full (all) access to be able to terminate        // processes.                nvProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION |                PROCESS_ALL_ACCESS, 0, nvProcessIDs(nvIndex));                        if nvProcessHandle != 0 then            // Get a handle to the first module in the process, which            // should be the executable.                        if EnumProcessModules(nvProcessHandle, nvModuleHandle,                            PROCESSID_LENGTH, nvBytesRequired) != 0 then                // Get the path of the module.                                if GetModuleFileNameExA(nvProcessHandle, nvModuleHandle,                        svModuleName, SizeOf(svModuleName)) != 0 then                    // Extract the filename (without an extension) from                    // the path.                                        ParsePath(svFileName, svModuleName, FILENAME_ONLY);                    if StrCompare(svFileName, szAppName) = 0 then                        // The process module matches the application                         // name passed to the function.                                                if TerminateProcess(nvProcessHandle, 0) > 0 then                            nvReturn++;                        endif;                    endif;                endif;            endif;        endif;    endfor;                if UnUseDLL(PSAPI_FILE) < 0 then        MessageBox("ERROR: Could not unload [" + WINSYSDIR ^ PSAPI_FILE +                "].", SEVERE);                        return -1;    endif;            return nvReturn;end;////////////////////////////////////////////////////////////////////////////////// Function:    _Process_Running//// Description: Determines if the specified process is running in memory.//// Parameters:  szAppName - Name of the application to check.//// Returns:     TRUE  - The process is running.//              FALSE - The process is not running.////////////////////////////////////////////////////////////////////////////////function BOOL ProcessRunning(szAppName)    BOOL    bvRunning;          // Process is running    NUMBER  nvProcessIDs(512);  // Array of process IDs    NUMBER  nvBytesReturned;    // Number of bytes returned in process ID array    NUMBER  nvProcesses;        // Number of processes running    NUMBER  nvIndex;            // Loop index    NUMBER  nvProcessHandle;    // Handle to a process    NUMBER  nvModuleHandle;     // Handle to a process module    NUMBER  nvBytesRequired;    // Number of bytes required to store values    POINTER pvProcessIDs;       // Pointer to process ID array    STRING  svModuleName;       // Module name    STRING  svFileName;         // Module filename begin    // The psapi.dll reads the Windows NT performance database. The DLL    // is part of the Win32 SDK.        if UseDLL(WINSYSDIR ^ PSAPI_FILE) < 0 then        // Could not load psapi.dll.                MessageBox("ERROR: Could not load [" + WINSYSDIR ^ PSAPI_FILE +                "].", SEVERE);                return FALSE;    endif;        // Get the PIDs of all currently running processes.        pvProcessIDs = ArrayToPointer(nvProcessIDs);    EnumProcesses(pvProcessIDs, 512, nvBytesReturned);    // Determine the number of process IDs retrieved. Each process ID    // is PROCESSID_LENGTH bytes.        nvProcesses = nvBytesReturned / PROCESSID_LENGTH;        // Get the executable associated with each process, and check if    // its filename matches the one passed to the function.        for nvIndex = 1 to nvProcesses        // Get a handle to the process.                nvProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION |                PROCESS_VM_READ, 0, nvProcessIDs(nvIndex));                        if nvProcessHandle != 0 then            // Get a handle to the first module in the process, which            // should be the executable.                        if EnumProcessModules(nvProcessHandle, nvModuleHandle,                            PROCESSID_LENGTH, nvBytesRequired) != 0 then                // Get the path of the module.                                if GetModuleFileNameExA(nvProcessHandle, nvModuleHandle,                        svModuleName, SizeOf(svModuleName)) != 0 then                    // Extract the filename (without an extension) from                    // the path.                                        ParsePath(svFileName, svModuleName, FILENAME_ONLY);                                        if StrCompare(svFileName, szAppName) = 0 then                        // The process module matches the application                         // name passed to the function.                                                bvRunning = TRUE;                                                goto ProcessRunningEnd;                    endif;                endif;            endif;        endif;    endfor;                ProcessRunningEnd:            if UnUseDLL(PSAPI_FILE) < 0 then        MessageBox("ERROR: Could not unload [" + WINSYSDIR ^ PSAPI_FILE +                "].", SEVERE);                        return FALSE;    endif;            return bvRunning;end;

Installshield停止操作系统进程的代码 --IS6及以上版本适用的更多相关文章

  1. Installshield停止操作系统进程的代码--IS5版本适用

    原文:Installshield停止操作系统进程的代码--IS5版本适用 出处:http://www.installsite.org/pages/en/isp_ext.htm这个地址上有不少好东西,有 ...

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

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

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

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

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

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

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

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

  6. php foreach 操作数组的代码

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

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

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

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

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

  9. C# FTP操作类的代码

    如下代码是关于C# FTP操作类的代码.using System;using System.Collections.Generic;using System.Text;using System.Net ...

随机推荐

  1. [Python学习] 模块三.基本字符串

            于Python最重要的数据类型包含字符串.名单.元组和字典.本文重点介绍Python基础知识. 一.字符串基础         字符串指一有序的字符序列集合,用单引號.双引號.三重(单 ...

  2. 谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题

    使用ZooKeeper学生们应该看到一个参数.它是ZooKeeper超过一半的群集必须节点(Majority)可用的.外来人才在整个集群中可用.在大多数情况下,这种说法是正确的. 谈论这篇文章背后的原 ...

  3. oracle 11g 基于磁盘的备份rman duplicate

    基于磁盘的备份rman duplicate 命令创建standby database 前提条件: 确保原始库数据库的备份.存档standby 结束是完全可见, 这里,如果原始文库和靶 - 侧数据文件, ...

  4. CentOS7 安装Hadoop集群环境

    先按照上一篇安装与配置好CentOS以及zookeeper http://www.cnblogs.com/dopeter/p/4609276.html 本章介绍在CentOS搭建Hadoop集群环境 ...

  5. 如何基于对话框的project基于改变BCG的

    一,stdafx.h 增加在下面的例子.BCGCBProInc.h间接介绍lib.   #include <BCGCBProInc.h> // BCGControlBar Pro #if ...

  6. poj3417 Network 树形Dp+LCA

    题意:给定一棵n个节点的树,然后在给定m条边,去掉m条边中的一条和原树中的一条边,使得树至少分为两部分,问有多少种方案. 神题,一点也想不到做法, 首先要分析出加入一条边之后会形成环,形成环的话,如果 ...

  7. .net程序调用检测和性能分析工具——DotTrace

    DotTrace可以对.net程序进行性能监测,对正在运行的程序和网站监控,主要界面如下: 需要将该工具安装在程序运行的服务器上. 主要用到这个视图,显示了每个方法的时间,下面是反编译出来的代码. P ...

  8. C++定义自己的命名空间和头文件

    下面的例子演示如何使用一个简单的演示空间和自己的头文件定义.码如下面: compare.h: namespace compare{ double max(const double* data,int ...

  9. 删除句子UITableView额外的底线和切割线

    于viewDidLoad添加代码功能句子: self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 它可 ...

  10. crmplugin项目加入key文件

    通常,办crm的plugin发展,然后dll文件导入系统,都需要加入项目key文件,那么怎么办? 在右上角单击指定项目--属性: 点击属性后,弹出属性编辑框: watermark/2/text/aHR ...