C# Windows服务启动失败:无法从命令行或调试器启动服务

C# Windows服务启动失败:无法从命令行或调试器启动服务,c#,windows-services,C#,Windows Services,嗨,我有这个错误 无法从命令行或调试器启动服务。必须首先安装winwows服务(使用installutil.exe),然后使用ServerExplorer、Windows服务管理工具或NET START命令启动 我不明白为什么我会犯这个错误。 这是我的代码: { string Hash = ""; string connectionstring = ConfigurationManager.ConnectionStrings["myConnectionString"].Conne

嗨,我有这个错误

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

我不明白为什么我会犯这个错误。 这是我的代码:

{
    string Hash = "";
    string connectionstring = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
    SqlConnection myConnection = new SqlConnection(connectionstring);
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection);
    myCommand.CommandType = CommandType.StoredProcedure;
    myConnection.Open();
    SqlDataReader rdr = myCommand.ExecuteReader();

    while (rdr.Read())
    {
        string filename = @"\\" + rdr.GetString(3);
        filename = System.IO.Path.Combine(filename, rdr.GetString(2));
        filename = System.IO.Path.Combine(filename, rdr.GetString(1));
        Hash = rdr.GetString(0);
        Hash = computeHash(filename);

    }
    myConnection.Close();
    return Hash;
}

您的代码与服务安装无关,这不是问题所在

为了测试该服务,您必须按照指示安装它


有关安装服务的更多信息:

要手动安装服务

要手动安装或卸载windows服务(使用.NET Framework创建),请使用实用工具
InstallUtil.exe
。可以在以下路径中找到此工具(使用适当的框架版本号)

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe

安装

installutil yourproject.exe
卸载

installutil /u yourproject.exe
见:(微软)

以编程方式安装服务


要使用C以编程方式安装服务,请参见下面的类(C-sharpcorner)。

我建议在部署时创建一个安装项目,原因如下:这似乎是最方便的方法,手动复制文件不会让人头疼。
遵循这些规则,您就知道如何创建它。此实例适用于vb.net,但对于任何类型都是相同的

安装Open CMD并在安装后键入
{YourServiceName}-i
NET START{YourServiceName}
中键入启动服务

卸载

installutil /u yourproject.exe
要卸载opencmd并键入
netstop{YourserviceName}
一旦停止,请键入
{YourserviceName}-u
并将其卸载

注意,我有同样的问题。他还向您展示了如何调试服务

以下是他在Visual Studio 2010/2012中使用基本C#Windows服务模板的说明

将其添加到Service1.cs文件:

public void onDebug()
{
    OnStart(null);
}
如果处于调试活动解决方案配置中,则可以更改Main()以这种方式调用服务

static void Main()
{
    #if DEBUG
    //While debugging this section is used.
    Service1 myService = new Service1();
    myService.onDebug();
    System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

    #else
    //In Release this section is used. This is the "normal" way.
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new Service1() 
    };
    ServiceBase.Run(ServicesToRun);
    #endif
}
请记住,虽然这是调试服务的一种很棒的方法。它不会调用
OnStop()
,除非您明确地调用它,就像我们在
onDebug()
函数中调用
OnStart(null)
一样。

Goto App.config

发现


真的

设置为False

也有人向我提供了一个“duh”提示:像在普通可调试应用程序中一样开发类,然后在感觉类已准备就绪时将其导入到服务中。我所做的是将需要调试的函数放在Timer.Start()之后的OnStart方法中;,这样我就可以调试了。你救了我一天!!非常感谢,太好了!无需附加到进程!;)感谢上帝。。。InstallUtil.exe简直是疯了。这工作得很好,我的服务器有问题,需要紧急运行该服务,我使用此步骤在本地计算机上配置该服务,请确保使用具有所需权限的正确用户对其进行配置。在运行
InstallUtil
后,它说该服务成功,但我仍然无法启动服务或在服务管理器中看到它。我发誓,我在野外找到的每个MSDN链接都被破坏了。ms docs是为什么在答案中包含相关信息很重要的典型代表。(您在这方面做得很好!谢谢!)是否有此设置的在线文档?我应该在哪里添加它?我尝试了应用程序设置,但没有效果。