2012-07-30 158 views
0

我有這個程序,在同一臺計算機上的幾個用戶正在使用(Windows 2008服務器環境與遠程桌面客戶端)。發送命令到一個進程

當程序正常結束時,它會刪除其工作目錄中的特殊文件。 我需要能夠發送此程序的所有實例一個命令乾淨關閉(以便它在退出時刪除文件)。

什麼是最好的方式來做到這一點,以及如何? 我假設每個實例的pid都是一個開始,但那又如何? 任何人有什麼好主意?

編輯:忘了提及,它是一個WinForm(不是命令行)程序。

EDIT2:我的意見是太長了,所以我想這是最好的只是編輯,而不是問題...

文件是刪除實際上是一個文件,其中包含它的PID。 擁有此文件的原因是爲了確保用戶不會嘗試使用相同參數(登錄信息)啓動程序兩次。

實際啓動客戶端程序的主程序(控制中心)正在跟蹤用戶目錄中的pidfile。 如果它發現文件它讀取pid並嘗試查看pid是否存在。 如果沒有,它實際上會刪除文件並讓用戶啓動客戶端窗口。

我猜想通過使用該過程,我可以使其查找與我的應用程序關聯的所有pid,並簡單地殺死它們,ut我會優先考慮能夠發送關閉命令,因爲這也會通知用戶在IM中,無論出於何種原因,程序都會關閉。 (客戶端啓動,啓動遠程服務器,或者在本例中爲「本地服務器啓動」)。

+0

你不能徹底關閉和基於pid的應用程序 – 2012-07-30 19:55:35

+2

任何「退出時刪除文件」的要求是一個令人頭痛的問題,這將是一個麻煩,失電是一種典型的故障模式。程序可以在啓動備份時輕鬆刪除該文件 – 2012-07-30 20:07:43

+0

我同意Hans的觀點,您是否考慮過在啓動時刪除文件或將值存儲在內存中,例如作爲'string'。 – 2012-07-30 20:43:06

回答

0

您可以通過使用Mutex

使用系統範圍內的事件查看鏈接頁面上的MSDN

2

的例子中Mutex是一些代表相互排斥。在這種情況下,我不認爲這真的是你想要的。這不是真正建模你想要的東西;加上時間只有一個應用程序將能夠關閉。我建議使用名爲EventWaitHandle的模型將應用程序發送到其他應用程序的事件(關機事件)。如果使用手動重置事件(通過使用EventResetMode.ManualReset當你創建一個EventWaitHandle對象。

你這樣做在後臺線程,信號時,便要鼓起的東西轉移到UI線程(通過Control.BeginInvoke)進行通信它需要關閉的主要形式