是否可以确定哪个进程启动我的 .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;
其他提示
这 CreateToolhelp32Snapshot 函数 有一个 Process32First 方法,可以让你读取 PROCESSENTRY32 结构. 。该结构有一个属性可以为您提供所需的信息:
th32父进程ID - 创建此过程的过程(其父过程)的过程的标识符。
本文将帮助您开始使用 ToolHelpSnapshot 函数:
ToolHelp/ManagementObject 方法的一个问题是父进程可能已经退出。
GetStartupInfo Win32 函数(如果没有 .NET 等效函数,请使用 PInvoke)填充包含窗口标题的结构。对于 Win32 控制台应用程序“app.exe”,从 cmd 启动时此标题字符串为“app”,从资源管理器(或 VS 调试器)启动时为“c:\full\path o\app.exe”。
当然,这是一个 hack(可能会在其他版本等中发生变化)。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
STARTUPINFO si;
GetStartupInfo(&si);
MessageBox(NULL, si.lpTitle, NULL, MB_OK);
return 0;
}
不隶属于 StackOverflow