簡體   English   中英

在SharpShell從上下文菜單啟動的程序中繼承適當的app.config

[英]inherit the proper app.config in a program started from context menu by SharpShell

我正在嘗試開發與Windows Shell集成的C#應用​​程序,因此我正在使用Sharpshell庫。 我直接在同一項目中使用Sharpshell庫,創建用於處理上下文菜單的專用類。 我最初將以下命令鏈接到上下文菜單上的click事件:

System.Diagnostics.Process.Start(path, _command.ToString() + "|" + string.Join("|", SelectedItemPaths));

並且系統正在運行。 現在,我嘗試直接從Click事件開始,使用以下代碼從Program.Main類的新位置開始:

            DmsDrive.Program.Main(new string[] { _command.ToString() + "|" + string.Join("|", SelectedItemPaths) });

並且該距離正在運行並正常啟動。 問題是使用此方法啟動進程會使程序在Windows目錄中查找app.config(主要currentdomain是explorer.exe進程)。 因此,未加載app.config,並且wcf服務的合同無效。

你知道我該怎么處理嗎? 還是我繼續使用Process.start方法更好?

問候。

我建議您直接使用Process Start函數啟動過程-我認為,如果我正確閱讀了您的帖子,實際上是在直接調用程序的“ Main”函數,這意味着您實際上並沒有在創建新的過程根本(只需在Windows資源管理器進程中調用外殼擴展加載到的函數)。 這意味着您正在運行的程序正在Windows Shell進程中運行,該進程不太友好,就好像它崩潰了一樣,它也可能使資源管理器崩潰。

使用Process start啟動程序。 如果您需要配置它的連接方式,請考慮將命令行參數傳遞給程序(例如服務地址)並手動構建WCF客戶端綁定(實際上,一旦習慣了創建WCF客戶端,您可能會發現以編程方式,它們的配置文件方法比較冗長,不太直觀!)

作為最后的選擇,對於嚴重的Windows軟件體系結構來說,您可以創建一個承載某種“協調器”服務的Windows服務。 Shell上下文菜單可以調用協調程序服務(說“做某事”),並且該服務可以啟動流程,或者該流程可以在啟動時啟動並輪詢服務(如果需要執行某些操作)。

暫無
暫無

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

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