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

时间:2012-07-20 06:07:17

标签: c# windows-services

嗨,我收到此错误

  

无法从命令行或调试器启动服务。首先必须安装winwows服务(使用installutil.exe),然后使用ServerExplorer,Windows Services管理工具或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;
}

6 个答案:

答案 0 :(得分:66)

观看this video,我有同样的问题。他还向您展示了如何调试服务。

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

您可以将其添加到Service1.cs文件中:

public void onDebug()
{
    OnStart(null);
}

如果您处于DEBUG Active Solution配置中,则更改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(),除非您明确地将其称为类似于我们在OnStart(null)函数中调用onDebug()的方式。

答案 1 :(得分:30)

手动安装服务

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

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

安装

installutil yourproject.exe

要卸载

installutil /u yourproject.exe

请参阅:How to: Install and Uninstall Services (msdn)

以编程方式安装服务

要使用C#以编程方式安装服务,请参阅以下课程ServiceInstaller (c-sharpcorner)

答案 2 :(得分:0)

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

为了测试服务,您必须按照指示进行安装。

有关安装服务的详细信息:Installing and Uninstalling Services

答案 3 :(得分:0)

我建议创建一个安装项目,因为部署它似乎是最方便的,没有手动复制文件的麻烦。 关注Windows service setup creation tutorial,您知道如何创建它。这个实例适用于vb.net,但对于任何类型都是一样的。

答案 4 :(得分:0)

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

卸载

要卸载Open CMD并输入{YourServiceName} -u,请在{{1}}后键入{{1}},然后将其卸载

答案 5 :(得分:-1)

转到App.config

查找

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

设为假