2014-05-08 44 views
0

我創建了一個C#windows服務並在本地開發人員計算機上成功安裝了它(它工作正常)。在其他機器上啓動服務:在本地計算機上啓動然後停止服務

現在我試圖在不同的機器上安裝服務。 我將「Release」文件夾複製到新機器並安裝了該服務。

當我在新機器上啓動服務時,出現以下錯誤: 「本地計算機上的服務已啓動,然後停止。如果某些服務未被其他服務或程序使用,則會自動停止服務。

我沒有得到任何消息,應用程序事件日誌,我甚至增加調試消息作爲節目的第一線,但我什麼也看不到在事件查看器(如同代碼沒有啓動的話) 。 :/

我做錯了什麼?

+0

請發佈您的'OnStart'方法的代碼。 –

+0

我已將隨機鏈接移除,看起來像是您的網站。不要這樣做。完全無關你的帖子。 – tnw

+1

Windows服務常見的首次部署問題與事件日誌有關。如果您的服務使用自定義源寫入應用程序事件日誌,則需要創建源代碼。通常安裝人員會爲你做這個。暫時嘗試在LocalSystem等特權帳戶下運行服務,以查看您的事件是否顯示。 –

回答

0

好吧,我已經找到了問題:

我用密碼解密與DataProctionScope.LocalMachine。 所以當我改變機器 - 解密失敗。

我不得不在本地計算機上重新加密的密碼,然後解密工作的罰款。

謝謝你的回覆!

*事件日誌調試不起作用,因爲我的錯。

0

「啓動後又停止」當你的服務器拋出啓動過程中的異常通常出現的消息。這可能有很多原因,包括無效路徑和由於缺少源代碼或權限不足而無法寫入應用程序事件日誌。

我通常包括運行我的服務作爲控制檯應用程序的選項。 這使我可以使用Console.WriteLine來顯示任何異常。

以下假定您的服務從System.ServiceProcess.ServiceBase延伸。

partial class MyService : ServiceBase 
{ 
    private static void Main(string[] args) 
    { 
     MyService svc = new MyService(); 

     if (Environment.UserInteractive) 
      RunConsole(args, svc); 
     else 
      Run(svc); 
    } 

    public MyService() 
    { 
     InitializeComponent(); 
    } 

    protected static bool KeepRunning { get; set; } 

    protected override void OnStart(string[] args) 
    { 
     StartServiceHost(); 
    } 

    protected override void OnStop() 
    { 
     StopServiceHost(); 
    } 

    protected override void OnShutdown() 
    { 
     StopServiceHost(); 
     base.OnShutdown(); 
    } 

    private static void RunConsole(string[] args, ConverterService svc) 
    { 
     // need to hold on to Ctrl+C, otherwise StopServiceHost() never gets called 
     Console.CancelKeyPress += (sender, e) => ShutDown(svc); 

     KeepRunning = true; 

     svc.OnStart(args); 
     Console.WriteLine("Press <Ctrl+C> to exit."); 
     while (KeepRunning) 
     { 
      Console.ReadLine(); 
     } 
    } 

    private void StartServiceHost() 
    { 
     // start your service 
    } 

    private void StopServiceHost() 
    { 
     // stop your service 
    } 

    private static void ShutDown(MyService svc) 
    { 
     Console.WriteLine("exiting..."); 
     svc.OnStop(); 
     KeepRunning = false; 
    } 
} 
+0

這是在開發人員計算機中進行調試的最佳解決方案,但是我的問題出現在其他計算機上,因此調試的正確方法是寫入Applicaiton事件日誌。 – Reginiano

相關問題