[英]C# Console app Environment.Exit(0) not recognised as a shutdown event
[英]C# How to enable exit event on a running javaw app
我正在嘗試為一個應用程序創建一個外部啟動器,我最近注意到它在 Java 中運行。我沒有立即注意到,因為該程序有一個 .exe 擴展名,我認為它是一個直接運行該軟件的可執行文件。 相反,這似乎是一個初始容器,然后打開 Java 並運行 Java 中的軟件。
我編寫的啟動器適用於記事本等應用程序,但我的結構不適用於我發現自己所處的情況。
這是我正在使用的(簡化的)代碼。
表單上的按鈕使用此啟動 exe
MyProcess = Process.Start(processPath);
MyProcess.EnableRaisingEvents = true;
MyProcess 是一個進程 class 與一個私有 class 相關聯。 我從這里的另一個答案中得到了代碼。
private Process withEventsField_MyProcess;
Process MyProcess
{
get { return withEventsField_MyProcess; }
set
{
if (withEventsField_MyProcess != null)
{
withEventsField_MyProcess.Exited -= MyProcess_Exited;
}
withEventsField_MyProcess = value;
if (withEventsField_MyProcess != null)
{
withEventsField_MyProcess.Exited += MyProcess_Exited;
}
}
}
每當觸發事件時,我都會運行我的事件代碼
private void MyProcess_Exited(object sender, System.EventArgs e)
{
//do stuff here
Application.Exit();
}
這樣做的問題是我打算監視一個可執行文件,但我發現自己有一個 exe,它統計 java 然后退出,我的事件將其檢測為整個系統的退出事件。
我試圖找到一個簡單的解決方案,讓我能夠檢測特定的 Java 應用程序何時關閉,以便我可以執行程序的 rest。
雖然我正在寫這個作為未來用戶的通用問題,但我有一個想法的暗示,但對如何實現它沒有明確的看法(假設這個想法很好)。
我發現通過 cmd 我可以通過執行命令行調用它們來獲取進程。 對於我想要監控的 Java 程序,命令行將作為唯一標識符。 因此,我應該能夠連接到它以確定我要監視哪個進程以查找退出事件。 這就是我碰壁的地方。
任何幫助將非常感激。
顯然,我沒有足夠的谷歌。 這很容易通過 WMI 查詢來實現。 此代碼顯示了如何隔離進程 javaw.exe 的所有實例並檢查任何 WMI 參數(例如命令行)
public static void Main()
{
SelectQuery query = new SelectQuery("Select * from Win32_Process WHERE Name = 'javaw.exe'" );
ManagementScope scope = new System.Management.ManagementScope(@"\\.\root\CIMV2");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
try
{
foreach (ManagementObject processes in searcher.Get())
{
Console.WriteLine(processes["CommandLine"].ToString() + Environment.NewLine);
}
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e);
}
Console.Read();
}
這里的指南顯示了如何在 WMI 查詢https://www.codeproject.com/Articles/12138/Process-Information-and-Notifications-using-WMI上創建事件觀察程序基礎 這是一個舊帖子,您將需要更新部分代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.