2
A
답변
5
var processes = from p in Process.GetProcessesByName(nameOfTheProcess)
where p.StartInfo.UserName == nameOfTheUser
select p;
foreach(Process p in processes) p.Kill();
편집 : 프레드릭가 지적했듯이, 사용자 이름 속성이 GetProcesses 얻을 프로세스 설정되어 있지 않습니다. 여기 (GetProcessOwner 방법은 here을 발견) 사용자 이름을 사용하려면 WMI를 사용하는 수정 된 버전입니다 : 사용자 이름을 얻기 위하여
static void KillProcessByNameAndUserName(string processName, string userName)
{
var processes = from p in Process.GetProcessesByName(processName)
where GetProcessOwner(p.Id) == userName
select p;
foreach(Process p in processes) p.Kill();
}
static string GetProcessOwner(int processId)
{
string query = “Select * From Win32_Process Where ProcessID = “ + processId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string[] argList = new string[] { string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod(“GetOwner”, argList));
if (returnVal == 0)
return argList[0];
}
return “NO OWNER”;
}
0
, 당신이는 Win32 API에서 프로세스의 보안 컨텍스트를 잡아해야합니다.
이미 위 코드에서 .Net Process 클래스에있는 프로세스 핸들을 사용하여 P/Invoke를 통해 OpenProcessToken() 함수를 호출하십시오. 프로세스 소유자에 대한 SID를 포함하는 구조를 얻습니다. 액세스 거부와 같은 오류에 대비하십시오. 사용자가 아닌 프로세스와 같은 모든 프로세스에 대해이 정보를 얻을 수있는 액세스 권한이 없기 때문입니다. 거기에서 SID를 이름으로 변환해야합니다. 이 작업을 수행하는 데는 몇 가지 방법이 있지만 LookupAccountSid() 함수 (다시 P/Invoke를 통해)가 사용자 이름을 가져옵니다.
프레임 워크 2.0에서는 보안 설명 자 (System.Security.AccessControl 네임 스페이스)를 다루는 데 도움이되는 내용이 추가되었지만 P/Invoke의 복잡성을 처리하는 데 도움이되는 내용은 없습니다 그곳에.
C#의 Win32 API 사용에 대한 정보는 pinvoke.net을 참조하십시오.
관련 문제
- 1. 특정 이름의 프로세스를 종료하는 스크립트
- 2. 특정 PID가있는 경우 Java에서 프로세스를 종료하는 방법
- 3. Windows에서 특정 프로세스를 종료하는 방법은 무엇입니까?
- 4. 특정 시간에 vb.net 프로그램을 종료하는 방법
- 5. matlab에서 실행중인 프로세스를 종료하는 방법은 무엇입니까?
- 6. vbscript에서 프로세스를 종료하는 방법
- 7. 프로세스를 종료하는 방법
- 8. 실행중인 프로세스를 찾고 QT에서 프로세스를 종료하는 방법은 무엇입니까?
- 9. 특정 디렉토리에서 실행중인 Java ProcessBuilder
- 10. 작업 관리자에서 실행중인 프로세스를 찾고 프로세스를 죽이려면
- 11. wmi 영구 이벤트 소비자로부터 프로세스를 종료하는 방법
- 12. freebsd/linux의 특정 코어에 프로세스를 바인드하는 방법
- 13. 특정 세션에 속한 프로세스를 얻는 방법?
- 14. VB.NET에서 실행중인 프로세스를 찾는 방법
- 15. Java GUI에서 Fedora의 프로세스를 실행하고 종료하는 방법
- 16. C#의 Window Service에서 프로세스를 종료하는 방법
- 17. android에서 현재 실행중인 응용 프로그램을 강제 종료하는 방법
- 18. 원격 서비스 프로세스를 정상적으로 종료하는 방법은 무엇입니까?
- 19. Windows에서 사용자 계정이 특정 그룹의 구성원인지 프로그래밍 방식으로 파악하는 방법?
- 20. DDMS에서 현재 실행중인 프로세스를 숨기는 방법
- 21. .net에서 실행중인 모든 프로세스를 얻는 방법 cf
- 22. AutoHotkey로 특정 프로세스를 닫을 수 없습니다.
- 23. 프로세스를 검색하고 특정 작업이있을 때 작업을 수행하십시오.
- 24. php 프로세스를 포킹하고 특정 웹 사용자와 연결
- 25. 특정 사용자의 프로세스 나열
- 26. 특정 포트에서 C로 실행중인 서비스 데몬을 얻으시겠습니까?
- 27. 리눅스의 특정 프로세스에서 실행중인 스레드 찾기
- 28. onClick 실행중인 특정 자바 스크립트 코드 잡기
- 29. 특정 MKAnnotation 특정 이벤트를 수행하는 방법
- 30. 사용자 생성/사용자 특정 기능
음 ... 그 코드가 컴파일됩니까? Linq 쿼리에서 select가 누락 된 것처럼 보입니다. 참고 사항. 비슷한 접근 방식을 테스트했지만 StartInfo 개체의 UserName 속성은 모든 프로세스에 대한 빈 문자열입니다. –
누락 된 '선택'을 추가했는데, 아마도 귀하가 귀하의 의견을 게시했을 때와 같을 것입니다.). 하지만 UserName에 대해 옳았습니다. 직접 만들지 않은 프로세스에 대해서는 설정되지 않았습니다. 다른 방법이 있어야합니다. –
+1 : WMI 솔루션이 잘 작동합니다. –