Vuser_416537
2022-01-25 10:41
VM算法平台

C++代码如何关闭VM进程?

如何在启动VM二次开发程序之前关闭VM后台程序。

  • 110
  • 0
  • 分享

全部回答1

V版主_Sherry

C#关闭VM进程的方法见2.1.6,C++代码如下:

1. C++

2.  

3. BOOL CcodehDlg::KillProcessByName(std::string & processName)

4. {

5.     BOOL bRet = FALSE;

6.     HANDLE SnapShot, ProcessHandle;

7.     SHFILEINFO shSmall;

8.     PROCESSENTRY32 ProcessInfo;

9.     ProcessInfo.dwSize = sizeof(PROCESSENTRY32);

10.   

11.      string strSearchName;

12.      string strRunProcessName;

13.      //get the process list in the snapshot.

14.      SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

15.      if (SnapShot != NULL)

16.      {

17.          //提升升级工具进程权限为SE_DEBUG_NAME,否则XP下无法杀掉进程 

18.          HANDLE hToken;

19.          if (OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))

20.          {

21.              LUID luid;

22.              if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))

23.              {

24.                  TOKEN_PRIVILEGES TokenPrivileges;

25.                  TokenPrivileges.PrivilegeCount = 1;

26.                  TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

27.                  TokenPrivileges.Privileges[0].Luid = luid;

28.                  AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL);

29.              }

30.              CloseHandle(hToken);

31.          }

32.   

33.          BOOL Status = Process32First(SnapShot, &ProcessInfo);

34.          while (Status)

35.          {

36.              // 获取进程文件信息

37.              SHGetFileInfo(ProcessInfo.szExeFile, 0, &shSmall, sizeof(shSmall), SHGFI_ICON | SHGFI_SMALLICON);

38.   

39.              // 检测进程是否需要关闭

40.              TCHAR tszProcess[64] = { 0 };

41.              lstrcpy(tszProcess, LPCWSTR(processName.c_str()));

42.              if (lstrcmp(tszProcess, ProcessInfo.szExeFile) == 0)

43.              {

44.                  //if (processName == string::fromWCharArray(ProcessInfo.szExeFile)) {

45.                  // 获取进程句柄,强行关闭

46.   

47.                  MessageBoxA(NULL, "杀死进程成功", "杀死进程成功", MB_OK);

48.                  ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessInfo.th32ProcessID);

49.                  if (ProcessHandle != NULL)

50.                  {

51.                      bRet = TerminateProcess(ProcessHandle, 1);

52.                      CloseHandle(ProcessHandle);

53.                  }

54.              }

55.              // 获取下一个进程的信息   

56.              Status = Process32Next(SnapShot, &ProcessInfo);

57.          }

58.      }

59.      return bRet;

60.  }

2022-01-25 10:46
  • 评论
  • |

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器