我認爲你有兩個完全不同的問題:
- 控制器/處理器通信
- 就地控制器的軟件更新
會如果你可以更詳細地描述這些處理程序的外觀,這會有所幫助。他們的.NET程序集是否具有實現處理程序接口的類?如果它那樣,那麼我幾乎建議使用MEF來定位和加載處理程序並執行它們。 MEF可能會使這些處理程序的位置和加載更容易。
自更新應用程序總是有些棘手。我已經解決了這個問題的一種方法是有一個兩部分的應用程序。第一部分是一個小引導程序應用程序,它只知道如何啓動控制器。從本質上講,找到控制器應用程序並啓動它是啓動程序的工作。我這樣做的方式是爲我已經部署的每個新版應用程序提供一個包含一個子目錄的目錄。引導程序只是選擇最高版本並啓動它在該目錄中找到的控制器應用程序。
樣品控制器目錄結構:
\Programs
\Controller
bootstrapper.exe
\v1.0
controller.exe
\v1.1 <-- Current version
controller.exe
當更新被應用,發生是一個新的「版本」目錄在控制器目錄中創建和更新返回一個代碼到控制器,用於指定其需要重新啓動。一旦控制器完成它的工作,它就會退出。由於整個過程是由引導程序啓動的(引導程序在啓動控制器時會阻止它),因此引導程序在控制器啓動時重新獲得控制權。引導程序再次執行它的啓動過程,找到新的控制器版本並啓動它。
這裏的一個問題是更新引導程序並不容易,但通常這不會因爲它包含很少的代碼而經常更新。
希望能夠幫助或激發一些想法。
處理程序不存在,但它看起來很可能這些將是獨立的應用程序。我們不負責編寫所有的處理程序,因此決定是爲了簡化。 Bootstrap建議是一個有趣的建議,尤其是版本文件夾的使用,它絕對值得考慮,謝謝。 – Andrew