2015-10-15 19 views
1

我需要幫助來確定這是否可能。我必須申請; app1和app2。 app1是主應用程序,app2是助手應用程序(啓動服務,在機器啓動時啓動app1並確保app1始終運行)。.NET訪問和控制外部應用程序的變量和方法

有沒有辦法讓我將這兩個應用程序寫入哪裏,如果app2檢測到事件,它可以連接到當前正在運行的app1並觸發其某個方法?我可以從app2訪問/修改任何app1的變量嗎?

我已經看過相當廣泛,但最接近我的答案是按下按鈕或更改文本的Win32/API FindWindow選項。我不認爲這是我正在尋找的。

是我想要的嗎?

任何幫助表示讚賞,謝謝!

+0

反對否決 –

回答

1

有很多方法可以在各個應用程序之間進行不同的折衷。

在另一個線程here中討論的可能是兩個應用程序在Windows操作系統中相互通信的最常見和首選的方法是Interprocess Communications (IPC)。僅此一項就會給你幾種不同的選擇,其中RPC,Pipes,Winsock,並且我也會在這裏包括WCF

您也可以使用操作文件並使用FileSystemWatcher或爲Registry watching創建類似的解決方案。

但是,這些解決方案都不允許您修改應用程序數據或直接調用方法。由於任何通信機制都允許您通過更好定義的API間接更改程序狀態,因此您確實不需要這些機會。這是抽象的基本思想。

您可以在技術上利用Process類或可能的AppDomain並通過Reflection提出解決方法。這不是你正在尋找的任何一個,維護可能會很麻煩。儘管知道這些技術用於其他目的是很好的。這裏有一些有關這個問題的有趣帖子:Cross AppDomain CallExample use of AppDomain,Example use of Process,another handy type to look at

還有另外一種方法,儘管對於您的情況有點過分,但爲了完整性,我會提及它。你可以寫一個Kernel Mode應用程序。這主要是如果你想與新硬件接口,即使在這種情況下,仍然可以用用戶模式寫入一些驅動程序。如果您要深入內核模式應用程序開發,您將不​​再生活在虛擬地址空間的安全區域中,如果您犯了一個錯誤,您不會再讓程序崩潰,您可以藍屏OS。在開發過程中,使用硬盤克隆實用程序(如Clonezilla)是明智的做法,如果您使用軟管操作系統,則從乾淨的平板啓動。您還需要再次熟悉其他內核模式調試工具,這有點不合適。

摘要

我意識到這些方法都將在技術上給你在問題中提到的具體行爲,但我要說的IPC方法是用於處理要在其中創建一個模式你最好的選擇服務/獨立應用程序對。

+0

非常感謝你的深入回覆!你給了我一個很好的起點來攻擊它。我已經投票了,但我在這裏是新的,所以目前它不會接受它。在作出答覆之前,我會等待更多答覆。再次感謝! – MattCash

+0

我使用FileSystemWatcher作爲類的方法。這幾乎是團隊以前做的事情;這似乎比編寫一個線程去像在指定的文件一樣,讀取它,看看測試是否已經改變,然後採取行動,有點更多。再次感謝。 – MattCash

+0

沒問題。我很高興我能幫上忙!如果您的要求發生變化,您也可以隨時調查其他方法之一。 :) –