내 .Net 애플리케이션을 시작하는 프로세스를 결정할 수 있습니까?
-
09-06-2019 - |
문제
.Net에서 콘솔 응용 프로그램을 개발 중이며 응용 프로그램이 cmd.exe 또는 explorer.exe에서 시작되었다는 정보를 기반으로 동작을 약간 변경하고 싶습니다.가능합니까?
해결책
Process this_process = Process.GetCurrentProcess();
int parent_pid = 0;
using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'"))
{
MgmtObj.Get();
parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]);
}
string parent_process_name = Process.GetProcessById(parent_pid).ProcessName;
다른 팁
그만큼 CreateToolhelp32스냅샷 기능 읽을 수 있는 Process32First 메서드가 있습니다. PROCESSENTRY32 구조.구조에는 원하는 정보를 얻을 수 있는 속성이 있습니다.
th32ParentProcessID -이 프로세스를 만든 프로세스의 식별자 (부모 프로세스).
이 문서는 ToolHelpSnapshot 함수 사용을 시작하는 데 도움이 됩니다.
ToolHelp/ManagementObject 접근 방식의 한 가지 문제는 상위 프로세스가 이미 종료되었을 수 있다는 것입니다.
GetStartupInfo Win32 함수(.NET에 해당하는 것이 없는 경우 PInvoke 사용)는 창 제목을 포함하는 구조를 채웁니다.Win32 콘솔 응용 프로그램 "app.exe"의 경우 이 제목 문자열은 cmd에서 시작할 때 "app"이고 탐색기(또는 VS 디버거)에서 시작할 때 "c:\full\path o\app.exe"입니다.
물론 이것은 해킹입니다(다른 버전 등에서는 변경될 수 있음).
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
STARTUPINFO si;
GetStartupInfo(&si);
MessageBox(NULL, si.lpTitle, NULL, MB_OK);
return 0;
}
제휴하지 않습니다 StackOverflow