在Windows服务的启动方法上获取错误

时间:2012-04-17 17:43:43

标签: c# .net windows-services

我已经使用(Visual Studio 8)创建了一个Windows服务并使用installutil.exe工具安装了它,但是我没有得到正确的结果,因为我在服务启动方法上执行了以下代码。

protected override void OnStart(string[] args)
{
    FileStream fs = new FileStream(@"e:\mcWindowsService.txt",
        FileMode.OpenOrCreate, FileAccess.Write);
    StreamWriter m_streamWriter = new StreamWriter(fs);
    m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
    m_streamWriter.WriteLine("m ready buddy");
    m_streamWriter.Flush();
    m_streamWriter.Close();
}

我没有在E Drive中创建文件,而是在我盯着它时显示跟随错误!

  

本地计算机上的测试服务安装程序服务已启动,然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。

3 个答案:

答案 0 :(得分:2)

将上述代码放在Try-Catch块中,将其写入事件日志以查找任何异常并进行调查。也可以将它们放在单独的线程中以避免任何阻塞。

答案 1 :(得分:0)

如果您从控制台运行该服务,请确保您的帐户拥有E驱动程序的权限。

如果您已经安装了服务,并意识到它抛出了异常,那么请设置服务安装程序的帐户类型,如

var serviceInstaller = new ServiceProcessInstaller();
            serviceInstaller.Account = ServiceAccount.LocalSystem;

答案 2 :(得分:0)

我几乎肯定你的代码崩溃了。上面的尝试捕获建议是最好的,所以你可以看到爆炸的东西。

此外: 尽量不要在OnStart中执行需要很长时间的事情 - 只需轻量级初始化。有一个超时,如果你超过这个门槛,Windows会抱怨它无法启动它 - 它将保持在启动状态,这很烦人。 在OnStart中,只启动一个计时器,并在该计时器的间隔 计时器 _Elapsed 的到期事件的处理程序中执行重物。在执行你的东西之前暂停计时器并在操作结束后重新启动它。