هل من الممكن تحديد العملية التي يبدأ بلدي .صافي التطبيق ؟

StackOverflow https://stackoverflow.com/questions/53501

سؤال

أنا النامية تطبيق وحدة التحكم في .صافي و أريد تغيير السلوك قليلا استنادا إلى معلومات التطبيق بدأ من 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 هيكل.هيكل الملكية التي سوف تحصل على المعلومات التي تريدها:

th32ParentProcessID - المعرف العملية التي خلقت هذا عملية (الأم عملية).

هذه المادة سوف تساعدك على الشروع في العمل باستخدام ToolHelpSnapshot وظيفة:

http://www.codeproject.com/KB/cs/IsApplicationRunning.aspx

قضية واحدة مع ToolHelp/ManagementObject النهج هو أن الأصل العملية بالفعل قد خرجت.

على GetStartupInfo Win32 وظيفة (استخدام PInvoke إذا كان هناك لا .صافي ما يعادلها) يملأ الهيكل الذي يتضمن عنوان النافذة.من أجل تطبيق وحدة تحكم Win32 "app.exe" هذا العنوان سلسلة "التطبيق" عندما بدأت من cmd "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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top