c# - Windows 服务在安装时不工作,在 Debug模式下工作正常;移动/删除文件时崩溃

标签 c# .net service

我创建了一个监视目录的 Windows 服务。将文件转储到其中时,它会获取数据并将其放入数据库中。然后将此文件移动到另一个目录并删除。它在 Debug模式下工作正常。但是当我将它安装在我的计算机上时,它会在将数据放入数据库后停止,并且相关文件既不会移动也不会被删除。我怀疑涉及权限问题。我试图创建一个事件日志:

public Service1()
    {
        InitializeComponent();
        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";         
    }

所以我有三个问题。 (1) 什么可能导致我的服务按照调试中的描述工作,但在我的计算机上安装时失败。(2) 我已经启动了一个事件日志,如上所示。但是我是否需要添加其他代码来记录我的服务停止事件。我认为这将在“覆盖 onShutdown”方法中完成。(3) 最后,当我的服务停止时,我想查看事件日志。但我不知道该怎么做,是在管理工具中吗?作为文件存储在某个目录中?

这里是对这篇文章的编辑,以代替下面给出的感激建议。

      try
        {
            File.Move(e.FullPath, finalString);
            File.Delete(e.FullPath);
        }
        catch(Exception q)
        {
            EventLog.WriteEntry("MySource", q.ToString(), EventLogEntryType.Error);

            using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["fmd"], true))
            {
                w.Write(DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss"));
                w.Write(q.ToString());
            }
        }

根据建议,我在文件移动和删除周围放置了一个 try-catch,另外我添加了一个 OnShutdown 方法:

 protected override void OnShutdown()
    {
        using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["ond"], true))
        {
            w.Write("stop OnShutdown");
        }
        //EventLog.WriteEntry("MySource", message, EventLogEntryType.Error);
    }

我不知道如何将任何系统错误消息传递给关闭方法,因此请提供任何建议。当我将修改后的代码作为服务安装时,它在移动或删除文件之前再次停止。我通过流访问的两个日志都没有记录任何内容。另外,事件查看器也什么也没显示?

最佳答案

可以这样写,

if (!EventLog.SourceExists("MySource"))
   EventLog.CreateEventSource("MySource", "Application");    

EventLog.WriteEntry("MySource", message, EventLogEntryType.Error);

要查看事件日志消息,转到管理员工具 -> 事件查看器并查找您创建的源。或者只需在运行窗口中键入 eventvwr。

安装服务后,它在 SYSTEM 用户帐户下工作,服务可能无法访问某些资源。请放上日志,看看问题到底出在哪里。

如果您的服务安装在您的开发机器上,请使用 Visual Studio 中 DEBUG 菜单下的附加到进程选项来查找。

关于c# - Windows 服务在安装时不工作,在 Debug模式下工作正常;移动/删除文件时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272098/

相关文章:

.net - 嵌套NEST `FirstOrDefault()`查询中 `Term()`有什么用途?

symfony - 服务不存在?交响乐2

grails - 有状态与无状态服务 Grails

android - Android Service在后台数据丢失时运行

c# - SMTP - SSL 证书问题 - C# - 为什么此代码有效?

c# - 将 c++/cli 项目从 .net 4.7 迁移到 .net core 3.1 时出现问题

c# - 在构建了所有子类之后,如何在父类(super class)中执行一些代码?

C# 获取所有具有共同属性的项目

.net - 如何获取.net中ForeignSecurityPrincipals对象的详细信息

.net - 高DPI问题