2011-02-24 69 views
3

我有一個在c#中創建的Windows服務。已安裝的Win服務不在服務管理器中顯示

與我一直在努力的其他一些相比,它相對簡單。

我建立了一個安裝項目來安裝它進行一些測試。

我添加了服務項目的主要輸出,並正確添加了所有依賴關係。

我去了視圖>自定義操作,並將我的主要輸出添加到安裝,提交,回滾和卸載。

項目建成,我右鍵單擊該項目,然後單擊安裝。

安裝回來了成功,我可以在添加控制面板上查看服務/刪除程序,但是當我進入服務管理器...沒有...

任何人都可以提供一些INSITE或任何可能導致成功安裝的服務不會顯示在服務管理器上的其他內容。

+0

它是否將服務可執行文件安裝到磁盤上?你可以在.exe上使用installutil,看它是否會給你一個錯誤? – 2011-02-24 19:19:22

+0

使用MSI日誌記錄查看可能出錯的內容。我不知道如何以這種方式創作MSI,所以可能會有任何問題。但日誌文件將提供進一步的線索。 – 0xC0000022L 2011-02-24 19:21:14

+0

是的,它將可執行文件安裝到我期望的磁盤上。當我嘗試使用installutil時,它會打開一個帶有一些文本的新命令窗口,並在我能夠讀取它之前再次關閉它,並且在命令窗口中沒有任何更改,我輸入命令 – Patrick 2011-02-24 19:21:33

回答

4

尋找在註冊表中的服務名稱原諒我,如果這個不用說了,但是你有沒有提到你在你的自定義操作執行哪些代碼。你的服務程序集必須有一個派生自System.Configuration.Install.Installer的類,並且該類必須具有[RunInstaller(true)]屬性。在該類中,您需要創建一個System.ServiceProcess.ServiceInstallerSystem.ServiceProcess.ServiceProcessInstaller的實例,在這些實例上設置適當的參數,並將它們添加到Installers集合中。 ServiceInstaller和ServiceProcessInstaller MSDN頁面有一個非常基本的例子,但如果這是需要的,它應該足以讓你到達那裏。

+0

已經很久了......我想我忘了那部分......謝謝。 – Patrick 2011-02-24 19:57:45

1

確保您在「Display name」屬性中提供了一些值。

從命令提示符處使用以下命令「sc query <service_name>」查看您的Windows服務是否已正確安裝。如果您不確定服務名稱,請在執行此命令後使用以下命令「sc query state= all >c:\ServicesList.txt」搜索C:\驅動器中的ServicesList.txt。

如果這也不起作用嘗試下HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

+0

sc query state = all> c:\ ServicesList.txt讓我訪問被拒絕。信息? – Patrick 2011-02-24 19:34:01

+0

當我檢查註冊表它沒有列出....所以,即使我已經添加了自定義操作,它不註冊? – Patrick 2011-02-24 19:36:53

+0

您是否以擁有管理員權限的用戶登錄?您需要管理員權限才能安裝Windows服務。 – AbrahamJP 2011-02-24 19:39:45

1

你說你把你的主要輸出添加到安裝等,但你是否創建了一個安裝程序派生類來做實際安裝的Windows服務?我不是在說安裝項目本身,但是在你的項目中應該有一個安裝程序類,它實際上是爲你安裝的。

我在我的博客上發佈了一篇關於創建易於安裝的服務框架的文章,它有創建isntaler類的示例。

http://blackrabbitcoder.net/archive/2010/10/07/c-windows-services-2-of-2-self-installing-windows-service-template.aspx

0

對我來說,這個問題的解決辦法很簡單,我忘了訪問修飾符「公共」添加到類。在添加訪問修飾符後,服務在服務列表中現在可見。

相關問題