【问题标题】:Getting Error on start method of windows servicewindows服务启动方法出错
【发布时间】:2012-04-18 04:58:00
【问题描述】:

我已经使用 (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 驱动器中创建文件!

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

【问题讨论】:

  • 运行服务的账号是否对E有读/写权限? E是否为用户而存在? (IE 是映射到网络共享的卷吗?)
  • 帐户以管理员权限运行,我在本地系统上执行。
  • 即使您使用管理权限运行,您的服务仍可能无法访问网络驱动器。 E 是网络驱动器吗?
  • 我的电脑上没有 Buddy E 驱动器而不是网络。

标签: c# .net windows-services


【解决方案1】:

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

【讨论】:

  • 好的,我将在单独的线程下运行它。可能问题会得到解决。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    我几乎可以肯定您的代码崩溃了。上面的 try-catch 建议是迄今为止最好的,因此您可以看到发生了什么。

    进一步: 尽量不要在 OnStart 中执行需要很长时间的东西——只执行简单的初始化东西。有一个超时,如果你超过这个阈值,Windows 会抱怨它无法启动它 - 它会保持在令人讨厌的启动状态。 在 OnStart 中仅启动一个计时器并在该计时器的时间间隔 timer_Elapsed 的到期事件的处理程序中执行您的繁重工作。在你执行你的东西之前暂停计时器并在操作结束后重新启动它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多