나는 사용자가 게임을 종료 한 후 특정 게임이 표시하는 광고를 자동으로 닫는 C# 응용 프로그램을 작성 중입니다. 내 프로그램은 사용자가 게임을 종료 한 것을 감지하면 게임 프로세스를 종료하여이를 수행합니다. 내 프로그램은 비슷한 일을하는 다른 사람이 작성한 Autohotkey 스크립트와 유사하지만 일부 기능과 GUI를 추가합니다.프로세스를 죽이는 두 가지 방법의 차이점은 무엇입니까?
당연히 Process.Kill 메서드를 사용했습니다. 그러나 "액세스가 거부되었습니다"예외로 실패합니다. Autohotkey 스크립트가 프로세스를 죽이는 비정상적인 방법을 사용한다는 것을 알았습니다. 나는 그것에 대해 저자에게 물었고, 그는 또한 그는 정상적인 방법으로 그 과정을 죽이는 데 어려움을 겪었다 고 말했다.
일반적인 프로세스 종료 방법이 작동하지 않는 이유는 게임에서 부정 행위를 방지하기 위해 사용하는 소프트웨어라고 생각됩니다. System.Management 네임 스페이스를 사용하여 내 프로그램에서 내 프로그램은 이제 호출 나는 WMI로 Process.KIll을 대체
; kills all process instances of a given executable name
; COM AutoHotkey library code omitted
KillProcessInstances(exe)
{
psvc := COM_GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
pset := COM_Invoke(psvc, "ExecQuery", "Select * from Win32_Process Where Name = '" exe "'")
penm := COM_Invoke(pset, "_NewEnum")
Loop, % COM_Invoke(pset, "Count")
If COM_Enumerate(penm, pobj)=0
{
COM_Invoke(pobj, "Terminate")
COM_Release(pobj)
}
COM_Release(penm)
COM_Release(pset)
COM_Release(psvc)
}
: 여기
은 다른 사람의 스크립트 프로세스를 죽이기 위해 사용하는 AutoHotkey에 코드입니다 프로세스를 죽일 수 있습니다.내가 이해할 수없는 것은 WMI가 Process.Kill과 다른 점이다. 나는 둘 다 일하기를 기대하거나 실패 할 것이다. 또한, 작업 관리자가 잘 프로세스를 죽일 수 있지만 그냥 Process.Kill 확실히 TerminateProcess win32 호출을 사용하는 것 같아요. 다른 사람이 다른 행동의 원인을 밝힐 수 있습니까? 중요한 경우 Windows XP를 실행하고 있습니다.
편집 : wj32는 WMI가 작동하는 이유를 설명했지만 아무도 내가 왜 작업 관리자로 프로세스를 죽일 수 있지만 내 프로그램으로는 죽일 수는 없는지 설명 할 수 있습니까?
작업 관리자가 작업을 종료 할 수 있다는 사실은 어떻습니까? 작업 관리자에 특별한 것이 있습니까? –