2015-01-07 53 views
4

我目前正在開發一個Windows服務(開始時這是件好事)。 最大的問題是我怎樣才能在開始參數字段中獲取參數(不需要手動操作)。C# - 服務如何設置啓動參數

所以我想看到的是以下內容。如果發生以下事情,在安裝該服務時我希望它。

服務得到安裝並設置了啓動參數。

一個會怎麼做這種事(已經被瀏覽StackOverflow的,但它不符合我想要的遵守)

enter image description here

我之所以問的問題是:服務是部分GUI與接收後端之間的通信層。如果後端位置不同(例如,另一個IP地址),則該服務需要相應地具有新地址。

如果你想有一些更多的信息請諮詢(不下來後,如果事情是不是爲了「只問:)」)

在此先感謝

+0

感謝你的澄清,我已經更新了我的答案。 – RvdV79

回答

3

的更新後你的問題,我明白你想要完成什麼。據我目前所知,不可能在不使用註冊表的情況下設置這些啓動參數。您必須從服務控制檯或使用安裝程序手動執行此操作。當你看到覆蓋ServiceBase.OnStart(MSDN ServiceBase.OnStart method)的MSDN頁面就明確規定:

進程初始化參數在OnStart方法的服務,而不是在Main方法。可以在服務控制檯中的服務的屬性窗口中手動設置args參數數組中的參數。在控制檯中輸入的參數不會被保存;當服務從控制面板啓動時,它們將一次性傳遞到服務。自動啓動服務時必須存在的參數可放置在服務註冊表項(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \)的ImagePath字符串值中。您可以使用GetCommandLineArgs方法從註冊表中獲取參數,例如:string [] imagePathArgs = Environment.GetCommandLineArgs();

問題是,當您刪除服務時,您仍然需要跟蹤這些註冊表設置。 因此,此處提供的鏈接("Am I running as a service")也可能有所幫助。

+1

鏈接中顯示的代碼將參數設置爲給定的可執行文件。例如「c:\ program files(x86)\ xxxxxxxx \ yyyyyy \ zzzz.exe/param1/param2」我想看到的是它在啓動參數中設置。我會用一些額外的信息來擴展我的問題。 – Blaatz0r

+0

是的,當服務停止時是可能的! –

1

使用sc.exe

c:\>sc config <myservice> binPath="\path\to\myservice.exe -param -param" 
0

在你OnStart()或服務線程使用類似:

string myArg = ConfigurationManager.AppSettings["MyArg"] 

凡在你的App.Config中已添加

<appSettings> 
    <!-- My keys --> 
    <add key="MyArg" value="xxx"/> 
</appSettings>