2014-05-08 41 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

相关问题