请教两个进程操作的一个疑惑

本文探讨了在软件更新过程中,如何通过启动Update.exe来终止Main.exe进程,并更新相关文件的问题。详细介绍了使用CreateProcess()和EnumProcesses等API进行进程管理和终止的具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是关于软件更新的
先启动主程序(称Main.exe)
要更新文件就得启动Update.exe 退出Main.exe进程
更新相关文件
在Main.exe中用下列代码创建进程Update.exe
if( !CreateProcess(NULL, //  no module name (use command line).
  cmdLine.GetBuffer(),     // Command line.
  NULL,             // Process handle not inheritable.
  NULL,             // Thread handle not inheritable.
  FALSE,            // Set handle inheritance to FALSE.
  0,                // No creation flags.
  NULL,             // Use parent's environment block.
  NULL,             // Use parent's starting directory.
  &si,              // Pointer to STARTUPINFO structure.
  &pi )             // Pointer to PROCESS_INFORMATION structure.
  )
 {
  return false;
 }

然后在Update.exe 中找出Main.exe杀掉 再更新文件
DWORD   aProcesses[1024];  
DWORD   cbNeeded=0;  
EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded);  //得到系统所有进程 
DWORD   cProcesses=cbNeeded/sizeof(DWORD);
for(DWORD idx=0;idx<cProcesses;idx++)  
{  
    HANDLE  hProcess=::OpenProcess(PROCESS_QUERY_INFORMATION   |   PROCESS_VM_READ | PROCESS_TERMINATE, FALSE,aProcesses[idx]);   //得到进程的HANDLE
    CString   sName("");  
    if(NULL!=hProcess)  
    {  
 HMODULE  hMod;  
         DWORD  cbNeeded;  
         if(EnumProcessModules(hProcess,&hMod,sizeof(hMod),&cbNeeded)) //得到MODULE的句柄
 {  
     DWORD   dw=GetModuleBaseName(hProcess,hMod,sName.GetBuffer(MAX_PATH),      
    MAX_PATH);   //得到MODULE名
     sName.ReleaseBuffer();  
 }  
 if(sName.CompareNoCase("room.exe")==0)  
 {  
     TerminateProcess(hProcess,0);  
 }  
 CloseHandle(hProcess);  
}  
......  //更新文件

问题出来了 如果自己手动启动Update.exe  更新文件没问题(可以找出Main.exe并杀掉)
但是照以上代码执行 更新文件不行(估计是没能杀掉Main.exe)
是什么问题呢   是CreateProcess()里的参数设置不对还是其他的什么问题?

高手指点!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值