15,471
社区成员
发帖
与我相关
我的任务
分享
char pBuf[MAX_PATH];
//获取应用程序完全路径,比 GetCurrentDirectory 好用多了
GetModuleFileName(NULL,pBuf,MAX_PATH);
STARTUPINFO startupinfo;
PROCESS_INFORMATION proc_info;
memset(&startupinfo,0,sizeof(STARTUPINFO));
startupinfo.cb=sizeof(STARTUPINFO);
// 最重要的地方
if(TRUE) ::CreateProcess(pBuf,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&startupinfo,&proc_info);
// ExeRestart.cpp
//
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <shellapi.h>
#include <tlhelp32.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
BOOL FoundProcess (DWORD dwProcessID)
{
BOOL bRet = FALSE;
HANDLE hProcessSnap = NULL;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)};
BOOL bWorking = Process32First(hProcessSnap, &pe32);
while(bWorking)
{
if(dwProcessID == pe32.th32ProcessID)
{
bRet = TRUE;
}
bWorking = Process32Next(hProcessSnap, &pe32);
}
CloseHandle (hProcessSnap);
}
return (bRet);
}
//
//ExeRestart /PID=等待结束的PID /EXE=启动的EXE程序
int _tmain(int argc, TCHAR* argv[])
{
int iRet = 0;
LPCTSTR szApp = PathFindFileName(argv[0]);
LPCTSTR szPID = NULL, szExe = NULL;
if(argc != 3)
{
_tprintf(_T("Using %s /PID=1234 /EXE=aa.exe\n"), szApp);
}
else
{
szPID = argv[1]+5;
szExe = argv[2]+5;
DWORD dwPID= _tcstoul(szPID, NULL, 10);
if(dwPID != GetCurrentProcessId())
{
while(FoundProcess(dwPID))
{
Sleep(1000);
}
iRet = (int)ShellExecute(NULL, NULL, szExe, NULL, NULL, SW_SHOWNORMAL);
}
}
return iRet;
}