簡體   English   中英

獲取流程的自定義狀態

[英]Get custom status of process

我想在一台機器上允許我的應用程序的多個進程。 可以在每個進程中加載​​項目(來自本地數據庫),我想確保項目只能在我的應用程序的一個進程中打開。

因此,在打開項目之前,我想檢查我要打開的項目是否已在另一個進程中打開。

我知道這不是最好的編程實踐,但我只是一個臨時解決方案,直到我們在數據級別上實現更復雜的鎖定機制。

我可以檢測到另一個正在運行的進程,但我可以以某種方式訪問​​或轉換為更適合獲取我想要的信息的東西嗎?

有點喜歡:

  Process[] allProcesses = Process.GetProcessesByName("MyApp");

  foreach (Process process in allProcesses)
  {
    var projects = process.OpenedProjects;

已經遇到過.net遠程處理,WCF,IPC但發現對於這個相當“簡單”的任務非常重量級。

如果這是一個臨時解決方案,只需選擇簡單的方法:
當進程加載項目時,只需使用項目名稱或ID在app目錄中寫入文件。 如果文件已存在,則表示該項目已在另一個進程中加載​​。 如果您想知道哪個進程已打開項目,您還可以將進程ID編寫為文件內容。

當然,您需要在流程完成后刪除該文件。 確保處理所有異常,以便在不刪除此文件的情況下無法完成該過程。 即攔截AppDomain.UnhandledException。

如果這是您所說的臨時解決方案,您可以為每個項目提供一個標識符(例如文件名)並將其顯示在主窗口的標題中,例如

C:\\ Project1.proj C:\\ Project2.proj C:\\ Project3.proj

然后使用process.MainWindowTitle.Split(' ').Contains . process.MainWindowTitle.Split(' ').Contains檢查項目是否打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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