簡體   English   中英

C# 如何在正在運行的 javaw 應用程序上啟用退出事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM