首页 文章

在其他计算机上启动服务:本地计算机上的服务已启动,然后停止

提问于
浏览
0

我创建了一个C#windows服务并将其成功安装在我的本地开发人员机器上(它运行良好) .

现在我正在尝试在不同的机器上安装该服务 . 我将“Release”文件夹复制到新计算机并安装了该服务 .

当我在新机器上启动服务时,我收到以下错误:“本地计算机上的服务已启动然后停止 . 如果某些服务未被其他服务或程序使用,则会自动停止 . ”

我没有收到任何消息到应用程序事件日志,我甚至添加了调试消息作为程序的第一行,但我在事件查看器中看不到任何内容(好像代码根本没有启动) . :/

我做错了什么?

2 回答

  • 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

    好吧,我发现了问题:

    我使用DataProctionScope.LocalMachine进行密码解密 . 所以当我更换机器时 - 解密失败了 .

    我不得不重新加密本地机器上的密码,然后解密工作正常 .

    谢谢你的回复!

    *由于我的错,事件日志调试无效 .

相关问题