我不得不執行與提升權限,像幾個命令的要求:可修改的服務的config文件殼(或類似)執行多個命令升高
- 調用程序(需要管理員權限)
- 淨停止爲MyService(需要管理員權限)
- 網開始爲MyService(需要管理員權限)
這一切動態,電子商務。 G。第一行可能包含代理設置,包括用戶名和密碼或對設置文件的任何其他修改。 (設置文件在程序文件夾中,程序修改設置文件是外部提供的,實際的信息將是用戶通過GUI輸入的。)
我想創建一個非常靈活的解決方案,使用cmd.exe進程重定向stdin和stdout。但是..它看起來像「runas」(需要ShellExecute)並且重定向輸入/輸出是獨佔的。 (另外,我注意到重定向和cmd.exe很難處理..我不得不編寫自己的函數,例如作爲ReadLine的替代品,因爲ReadLine需要在最後一個NewLine並等待,如果有是一個命令提示符(意思是你的文本行像c:\ bla>,但沒有NewLine。但是,不知道結果是什麼會導致寫一些通用的困難。)
有3種替代方案我可以想的:
- 得到UAC提示爲每一個命令(我想不是這樣的)
- 啓動升高的過程,這可以調用爲所欲爲 - >需要額外的項目文件(.exe),我想避免,也使部署更爲困難(附加文件)
- 上創建一個批處理文件飛,運行它提升。這也是我想避免的,因爲在那個文件中可以有純文本的密碼信息(例如代理用戶/密碼)。我至少必須確保始終覆蓋其內容,然後將其刪除。
如何來處理呢?
對於網絡啓動/停止是正確的,我可以簡單地使用System.ServiceProcess.ServiceController。在這裏使用命令行只是想法,因爲我想要使用cmd選項。我不想啓動這個應用程序,因爲它的代碼很大,所以一個小的,單獨的應用程序似乎是最不好的解決方案。此外,因爲我沒有(短谷歌)找到一個可靠的方式擺脫臨時文件 - 可能總是有一個鎖,但我想刪除它,或者應用程序可能會在最糟糕的時刻崩潰.. –
@ AndreasReiff我不確定你應該擔心重新啓動相同的可執行文件。這並不重要,它是巨大的。它已經在運行。它已經被激化,它的一部分已經在記憶中。不應該是一個問題。請記住,UAC對話框將顯示暫停。 –