78

嗨,我收到了这个错误

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

6 回答 6

113

这个视频,我也有同样的问题。他还向您展示了如何调试服务。

以下是他在 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()调用的方式明确调用它,否则它不会调用。OnStart(null)onDebug()

于 2013-06-24T02:14:10.270 回答
37

手动安装服务

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

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

安装

installutil yourproject.exe

卸载

installutil /u yourproject.exe

请参阅:如何:安装和卸载服务 (Microsoft)

以编程方式安装服务

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

于 2012-07-20T06:11:37.120 回答
1

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

为了测试服务,您必须按照说明安装它。

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

于 2012-07-20T06:11:26.143 回答
0

我建议在部署时创建一个安装项目,这似乎是最好的方便,不用担心手动复制文件。按照Windows 服务设置创建教程,您知道如何创建它。此实例适用于 vb.net,但适用于任何类型。

于 2012-07-20T06:17:46.747 回答
0

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

卸载

卸载打开 CMD 并输入NET STOP {YourserviceName}一旦停止输入{YourServiceName} -u,它应该被卸载

于 2012-07-20T06:18:01.387 回答
0

转到 App.config

寻找

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

设置为假

于 2014-12-26T04:01:29.397 回答