我要在你个com中调用另一个.exe文件使其只能启动并运行一次.当点击退出按钮后.终止.exe文件并是其退出内存..
启动按钮下的代码:
char cFileName[128];
strcpy(cFileName,"C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe -remote -nosplash");
STARTUPINFO info; memset(&info,0,sizeof(info));
info.cb = sizeof(info);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
//m_pinfo在头文件中定义了..
if(hProcess == NULL)
{
if(!CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&info,&m_pinfo))
{
AfxMessageBox("Can't start task!");
}
}但我在终止按钮下的代码:
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
if(hProcess != NULL)
{
TerminateProcess(hProcess,0);
hProcess=NULL; }
为什么在内存中还驻留C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe
请指点!
启动按钮下的代码:
char cFileName[128];
strcpy(cFileName,"C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe -remote -nosplash");
STARTUPINFO info; memset(&info,0,sizeof(info));
info.cb = sizeof(info);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
//m_pinfo在头文件中定义了..
if(hProcess == NULL)
{
if(!CreateProcess(NULL,cFileName,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&info,&m_pinfo))
{
AfxMessageBox("Can't start task!");
}
}但我在终止按钮下的代码:
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
if(hProcess != NULL)
{
TerminateProcess(hProcess,0);
hProcess=NULL; }
为什么在内存中还驻留C:\\Program Files\\Digital Rapids\\Stream\\Klamath.exe
请指点!
HANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, processentry.th32ProcessID);
::TerminateProcess(hProc, 0);
::WaitForSingleObject(hProc, 5000);
等一下 试试看
CString str;
STARTUPINFO si;
PROCESS_INFORMATION pi; // 调用的应用程序名
str = "Ping"; //"Ping.exe" // zero out and initialize STARTUPINFO
memset( &si, 0, sizeof( si ) );
si.cb = sizeof( si );
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
if(CreateProcess(
NULL, // can be name of process unless
// batch file, else must be
// in command line:
(char*)LPCSTR(str), // command line
NULL,NULL, // security options
FALSE, // if true will inherit all
// inheritable handles
// from this process
NORMAL_PRIORITY_CLASS, // can also be HIGH_PRIORITY_CLASS
// or IDLE_PRIORITY_CLASS
NULL, // inherit this process's
// environment block
NULL, // specifies working directory
// of created process
&si, // STA RTUPINFO specified above
&pi // PROCESS_INFORMATION returned
)
)
{
// HANDLE pH = pi.hProcess;
// // wait until application is ready for input
// if ( !WaitForInputIdle( pH,1000 ) )
// {
// // send messages, etc.
// }
// kill process with 0 exit code
// TerminateProcess( pH, 0 );
}
else
{
AfxMessageBox( "Ping.exe 文件当前目录不存在!" );
}
如果是服务好像不行。
但进程terminateProcess,应该可以杀死得。并且
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,m_pinfo.dwProcessId);
if(hProcess != NULL)
{
TerminateProcess(hProcess,0);
hProcess=NULL; }m_pinfo.dwProcessId这个时哪儿来得?
事不是已经变化了阿那个EXE结束了ma ?还是exe结束了,存在进程?
这儿很容易出错,并不是对自己的子进程可以获得全部权限的。你应该先提升父进程的debug权限。