2009-12-08 252 views
0

我有一個Windows服務,我從一個離開的開發人員繼承。 Windows服務在QA環境中運行得很好。當我安裝該服務並在本地運行時,我收到此錯誤:Windows服務啓動然後停止

服務無法啓動。 System.InvalidOperationException:請求的性能計數器不是自定義計數器,它必須初始化爲ReadOnly。

下面是代碼:

ExternalDataExchangeService exchangeService = new ExternalDataExchangeService(); 
      workflowRuntime.AddService(exchangeService); 
      workflowRuntime.AddService(new SqlTrackingService(AppContext.SqlConnectionImportLog)); 
      ChallengerWorkflowService challengerWorkflowService = new ChallengerWorkflowService(); 
      challengerWorkflowService.SendDataEvent += new EventHandler<SendDataEventArgs>(challengerWorkflowService_SendDataEvent); 
      workflowRuntime.AddService(challengerWorkflowService); 
      workflowRuntime.StartRuntime(); <---- Exception is thrown here. 

回答

1

檢查安裝程序代碼。通常你會發現計數器是在安裝中創建的(它將在客戶端站點的管理權限下運行),然後代碼將它們當作存在使用 - 但不會嘗試創建它們,因爲它們不希望具有權限。

如果您剛剛獲得源代碼然後嘗試運行它,則計數器/計數器類不存在,因此您立即崩潰。 (或者檢查計數器是否存在/你有本地管理員,如果他們編寫代碼在服務中創建它的話。)

看到它之前提到它。

+0

您可能想要增加服務進程用戶的權限以查看是否修復了問題。 – 2009-12-08 16:43:50

+0

我在應用程序或安裝程序中找不到任何計數器。我在我的電腦上以Admin身份登錄。 – 2009-12-08 21:26:51

+0

必須從代碼中找到它期望的計數器,並跟蹤這是由開發人員創建的自定義計數器,還是基於Windows預計會讀取的自定義計數器。 (它可能可以說是一個交換應用計數器,並且您的QA框有交換,但您的開發PC沒有安裝交換機。) – Andrew 2009-12-08 21:29:36

0

附加調試器並斷開InvalidOperationException(第一次機會,即拋出時)?