无法从命令行或调试器启动服务

31

我创建了一个Windows服务并在服务器上安装。它似乎正常工作,即执行其预期功能。但是,当我通过远程桌面登录到服务器时,我看到以下消息:

无法从命令行或调试器启动服务。必须首先使用installutil.exe安装Windows服务,然后使用ServerExplorer、Windows服务管理工具或NET START命令启动。

我点击并转到服务管理器检查服务,它已经成功启动。没有报告错误。

我已将其安装为使用本地系统作为“登录为”。

谢谢。


你确定那个服务就是抛出错误信息的吗? - Arsen Mkrtchyan
这个消息只在我安装了Windows并且服务读取XML文件需要持续运行后才开始出现。圣诞节之后我会处理这个问题,因为那时候我回到工作岗位。只是看起来很奇怪,因为它是在我安装服务之后才出现的。但是就像我说的,它可以正常工作,只是不希望用户通过远程桌面登录时出现这个消息。 - Boomerang
可能是[Windows服务启动失败]的重复问题。请参考:https://dev59.com/G2435IYBdhLWcg3w4UWs - Ofer Zelig
3个回答

43

请将 Program 类中的 Main 方法更改为以下内容:

    /// <summary>
    ///   The main entry point for the application.
    /// </summary>
    private static void Main()
    {
        var myService = new MyService();
        if (Environment.UserInteractive)
        {
            Console.WriteLine("Starting service...");
            myService.Start();
            Console.WriteLine("Service is running.");
            Console.WriteLine("Press any key to stop...");
            Console.ReadKey(true);
            Console.WriteLine("Stopping service...");
            myService.Stop();
            Console.WriteLine("Service stopped.");
        }
        else
        {
            var servicesToRun = new ServiceBase[] { myService };
            ServiceBase.Run(servicesToRun);
        }
    }

你需要在服务类中添加一个Start方法:

    public void Start()
    {
        OnStart(new string[0]);
    }

在项目属性的“应用程序”选项卡中,将项目的输出类型从“Windows应用程序”更改为“控制台应用程序”。现在,您只需按F5即可开始调试,但仍然可以将可执行文件作为Windows服务运行。


@Tadej 你重新构建了吗? - MattCom
@MattCom,我找到了另一种方法来做这件事。但是我不记得具体是什么了。 - tedi

-4

前往 App.config

找到

<setting name="RunAsWindowsService" serializeAs="String">
<value>True</value>

设置为False


-4

按下CTRL-ALT-CANC(*),然后转到“服务”选项卡。有一个服务列表,搜索您需要启动的服务,选择它并单击“启动”。

如果没有找到该服务,则可能已被卸载、未(正确?)安装或由于其他原因,Windows不知道您的服务。

(*) 或 CTRL-ALT-DEL(ete) 或其他键,具体取决于键盘语言。


CANC?那是删除吗? - Salem
谢谢,我添加了一个(*)来澄清。我没有想到这取决于键盘。 - fresko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接