0
我有一个在Visual Studio 2010中开发的应用程序,需要配置安装程序(作为.msi文件)来启动程序,然后终止任务。我在msi中有一个自定义动作来启动该程序,但我无法添加一个步骤来终止该任务。任何建议都会很棒。谢谢!配置MSI文件在安装时启动并终止程序
我有一个在Visual Studio 2010中开发的应用程序,需要配置安装程序(作为.msi文件)来启动程序,然后终止任务。我在msi中有一个自定义动作来启动该程序,但我无法添加一个步骤来终止该任务。任何建议都会很棒。谢谢!配置MSI文件在安装时启动并终止程序
您需要创建自定义操作才能处理此操作。 Windows Installer没有杀死进程事件。下面是我创建来处理这个问题的原生C++应用程序。
// KillProc.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <algorithm>
#include <string>
BOOL KillProcess(_TCHAR* szProcessToKill);
TCHAR* AcTcharlower(TCHAR *pString);
int _tmain(int argc, _TCHAR* argv[])
{
if(argc > 1){
KillProcess(argv[1]);
}else{
// No Process found
}
return 0;
}
BOOL KillProcess(_TCHAR* szProcessToKill){
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 processEntry32;
LPWSTR lpszBuffer = new TCHAR[MAX_PATH];
LPWSTR lpszProcessToKill = new TCHAR[MAX_PATH];
lpszProcessToKill = AcTcharlower(szProcessToKill);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // Takes a snapshot of all the processes
if(hProcessSnap == INVALID_HANDLE_VALUE){
return(FALSE);
}
processEntry32.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(hProcessSnap, &processEntry32))
{
CloseHandle(hProcessSnap);
return(FALSE);
}
do
{
lpszBuffer = processEntry32.szExeFile;
if(!wcsicmp(lpszBuffer,szProcessToKill)){ // Is this our Process
hProcess = OpenProcess(PROCESS_TERMINATE,0, processEntry32.th32ProcessID); // It is so get the process handle
TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}while(Process32Next(hProcessSnap,&processEntry32)); // gets next member of snapshot
CloseHandle(hProcessSnap); // closes the snapshot handle
return(TRUE);
}
TCHAR* AcTcharlower(TCHAR *pString)
{
static TCHAR pBuffer[MAX_PATH];
TCHAR *s = pString;
TCHAR *t = pBuffer;
while (*s != '\0')
{
*t = tolower(*s);
s++;
t++;
}
return(pBuffer);
}
如果您的自定义操作中的代码不起作用,那么您将显示该代码。这不是一个真正的Windows安装程序问题AFAIK。 – PhilDW
没有代码,现在在提交节点上运行主输出。它后面没有自定义代码。我问是否有办法启动应用程序,然后关闭作为安装的一部分。 –
如果您在“每个人”安装中启动进程作为提交自定义操作,则存在两个问题。 1)它将与系统帐户一起运行,无法访问桌面和其他用户配置文件项目,可能会失败,并且2)安装将暂停,直到过程完成。目前还不清楚在你的问题中“kill”意味着什么,因为它意味着你用你的代码启动你的程序,那为什么它不完成? – PhilDW