相关疑难解决方法(0)

更轻松地调试Windows服务

是否有更简单的方法来单步执行代码,而不是通过Windows服务控制管理器启动服务,然后将调试器附加到线程?这有点麻烦,我想知道是否有一个更简单的方法.

c# debugging windows-services

321
推荐指数
14
解决办法
22万
查看次数

C# - 具有系统时间意识的Windows服务

我正在考虑编写一个Windows服务,它将在用户指定的时间打开或关闭某个功能(使用我将提供的配置实用程序).基本上,用户将指定PC将进入"仅工作"模式(阻止Facebook和其他分散注意力的站点)的某些时间,然后当这些时间到来时,PC将返回到正常模式.

我已经想出了一些方法来创建"仅限工作"模式,但我正在努力的是如何知道何时进出该模式.我真的不想使用线程和计时器,如果我可以避免它,因为这似乎会产生大量的开销,所以我正在寻找的将是某种方式:

  • 如果要检查某种timeChanged()事件,请挂钩到Windows API
  • 使用某种预先构建的库在指定时间触发事件
  • 我没有想到的其他方法是优雅和美妙的

有谁知道最好的方法吗?

c# scheduled-tasks job-scheduling

8
推荐指数
1
解决办法
5056
查看次数

为什么计时器不能在Windows服务中运行?

我知道这是一个已被问到的问题,但我找不到任何解决方案.这是我的服务.

class Program : ServiceBase
{
    private  Timer _timer;
    public Program()
    {
        ServiceName = "PrintTime";
    }

    static void Main(string[] args)
    {
        Run(new Program());
    }

    protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        _timer = new Timer(5000);
        _timer.Elapsed += _timer_Elapsed;
        _timer.Start();
    }

    void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        WriteTimeToFile();
    }

    protected override void OnStop()
    {
        _timer.Stop();
    }

    private void WriteTimeToFile()
    {
        using (FileStream fs = new FileStream(@"d:\mylog.txt", FileMode.Append,            FileAccess.ReadWrite))
        {
            StreamWriter streamWriter = new StreamWriter(fs);
            streamWriter.Write(DateTime.Now.ToShortTimeString());
            streamWriter.Close();
            fs.Close();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我想每隔5秒写入 …

c# windows-services

5
推荐指数
2
解决办法
1万
查看次数

Windows服务是否需要确保可以在不同的线程上处理命令?

当通过服务控制管理器运行时,Windows服务需要假设可以在不同的线程上调用命令处理方法(OnStart,OnStop等),而不确保例如在方法之间可以看到成员的分配吗?

public class MyService : ServiceBase {

    private Object _foo;    

    protected override void OnStart(string[] args) {
        _foo = new Object();
    }

    protected override void OnStop() {
        if (_foo == null) {
            throw new Exception("Assignment not visible"); // Can this happen?
        }

        _foo = null;
    }

}
Run Code Online (Sandbox Code Playgroud)

我无法保证我的示例中的异常不会被抛出,但我发现的所有示例(包括StackOverflow上的其他示例)似乎都假设,例如,OnStart()中变量的赋值将始终在OnStop()中可见.

如果SCM没有做出这样的保证,我就知道如何确保分配是可见的(例如,通过在服务中的所有读/写周围添加一个锁).我对这些措施是否必要感兴趣.

c# windows-services service-control-manager

5
推荐指数
1
解决办法
321
查看次数

在长时间运行的Windows服务中使用计时器

我试图在Windows服务中使用计时器.该服务能够启动和停止,当这种情况发生时,我会在事件日志中写入内容,这是有效的.我的问题是我还想使用一个持续运行的计时器,并在每次触发timeElapsed事件时向事件日志写入内容.

编辑:(我更改了代码,所以计时器是一个字段,但仍然不是我期望的结果,事件日志中没有日志条目)

using System.Timers;
Run Code Online (Sandbox Code Playgroud)

初始化服务:

    public Timer timer;

    public MonitorService()
    {
        InitializeComponent();
        timer = new Timer(10000);
        //Some code that really doesn't matter
    }
Run Code Online (Sandbox Code Playgroud)

开始活动

    protected override void OnStart(string[] args)
    {
        // Hook up the Elapsed event for the timer.
        timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        timer.Enabled = true;

        timer.Start();

        EventLogger.WriteEntry("Biztalk monitoring service started", EventLogEntryType.SuccessAudit);

        // If the timer is declared in a long-running method, use
        // KeepAlive to prevent garbage collection from occurring
        // before the method ends.
        // GC.KeepAlive(timer);
    } …
Run Code Online (Sandbox Code Playgroud)

c# windows-services timer .net-4.0

2
推荐指数
1
解决办法
4521
查看次数

Windows服务和设计模式

我有一个Windows服务来完成后台进程.这个Windows服务将与asp.net网站互动.功能如下.

在我的网站上有3个动作.用户可以选择任务(假设有三个按钮).然后它将调用Windows服务.其余操作由Windows服务执行.用户可以从网站注销,但它将在后台运行该服务.一旦完成,它将在数据库中进行相应的更改.我需要知道是否可以将任何设计模式应用于Windows服务(工厂,抽象工厂等).我已经阅读了不同的设计模式,但我对这如何应用于项目感到困惑.目前我在Windows服务的'OnStart'和'OnStop'事件中编写完整的代码.请指导我.

谢谢.

design-patterns windows-services

2
推荐指数
1
解决办法
2077
查看次数