Windows服务是由基于Windows NT的操作系统上的服务控制管理器运行的后台服务进程,类似于守护程序或UNIX服务。
我是初学者,正在尝试开发一个 Windows 服务,该服务会不断检查文件夹(或文件夹组)中是否有任何新文件或更改的文件。一旦检测到任何新文件或更改(对文件或文件...
我有一个长期运行的类(不是BackgroundService),它有一个内部通道,我用它来缓冲传入的请求。 存在Enqueue方法,如下: 公共异步任务 我有一个长时间运行的类(不是BackgroundService),它有一个内部通道,我用它来缓冲传入的请求。 存在一个Enqueue方法,如下: public async Task<bool> Enqueue(IMessage message) { bool result; try { if (_cts.IsCancellationRequested) { _logger.LogInformation("{TypeName} cannot be enqueued because the queue is stopped.", message.GetType().Name); result = false; } else { await _messageChannel.Writer.WriteAsync(message); result = true; _logger.LogInformation("Message {TypeName} written to internal channel.", message.GetType().Name); } } catch (ChannelClosedException) { _logger.LogInformation("{TypeName} cannot be enqueued because the channel is closed.", message.GetType().Name); result = false; } catch (Exception e) { _logger.LogError(e, "Error enqueuing {TypeName}", message.GetType().Name); result = false; } return result; } 在类构造函数中,使用以下命令启动消息读取器循环: Task.Run(() => _MainMessageLoop(_cts.Token)); _MainMessageLoop 看起来像: private async Task _MainMessageLoop(CancellationToken stoppingToken) { try { var channelReader = _messageChannel.Reader; while (await channelReader.WaitToReadAsync(stoppingToken).ConfigureAwait(false)) { try { var item = await channelReader.ReadAsync(stoppingToken).ConfigureAwait(false); _logger.LogInformation("Message {TypeName} read from internal channel.", item.GetType().Name); await _DoSomethingAsync(item); } catch (Exception e) { _logger.LogError(e, "Error doing something"); } } _logger.LogInformation("Channel reader loop exited {MethodName}.", nameof(_MainMessageLoop)); } catch (OperationCanceledException) { _logger.LogDebug("OperationCanceled {MethodName}", nameof(_MainMessageLoop)); throw; } catch (Exception e) { _logger.LogError(e, "Error in {MethodName}", nameof(_MainMessageLoop)); throw; } } 这在一段时间内效果很好(几个小时,消息负载非常轻),然后就停止了。 根据日志,写入仍在发生,但读取端卡住了。 没有与读取失败、抛出异常等相关的日志消息。读取循环似乎停止了。 我尝试了有界/无界、TryRead与ReadAsync的几种组合,每种组合的结果大致相同。 写入仍在发生(这意味着该对象还活着并且运行良好),没有任何运气。大多数文档似乎都没有暗示这一点,但我认为我正在做一些不符合预期的事情,或者某个地方存在错误。我在应用程序中使用的其他通道工作正常,但它们是 HostedService 级别的单例。 有人遇到过类似的事情吗? 我的猜测如下,GC 清理了你的Task。在 _MainMessageLoop 内部初始等待之后,执行将返回到 Task.Run,这样 Task 就“结束”了,因为之后没有执行任何操作。如果没有人持有对从 Task 创建的 Task.Run 的引用,它最终将被 GC 清理。将 Task 存储为属性或字段,然后重试。在构造函数内部启动 Task 的想法是一个坏主意,特别是如果 Task 未存储在类内部,因为它可能会导致 UnobservedTaskException。
安装并启动 CherryPy 服务器脚本作为 Windows 服务(使用 sc.exe)
我正在尝试安装并启动一个简单的 CherryPy 服务器作为 Windows 服务。 这是脚本:(删除了一些行以使其简短。从命令手动执行时它完全可以工作......
我在Linux上使用过MongoDB几次,这是我第一次在Windows上使用它。由于还有其他类似的应用程序在 Linux 上运行,并且所有这些应用程序看起来都很好,我怀疑这个 p...
.NET 6.0 应用程序在用户注销后从 Windows 服务启动时无法使用 COM 对象
我正在.NET 6.0中开发一个应用程序,需要使用COM对象(这是一个严格的要求)。我现在需要通过作业调度服务来调度和启动该应用程序。 我的缺点...
Commons-Daemon procrun 二进制文件缺少 prunsrv.exe 或 prunmgr.exe
我计划使用 commons-daemon procrun 创建基于 Windows 的服务。我从下载中下载了commons-daemon-1.0.10-bin.zip文件,但是当我解压它时,我找不到prunsrv.ex...
我有一个自定义编写的 Windows 服务,在许多 Hyper-V VM 上运行。作为某些正在运行的自动化测试的一部分,虚拟机每小时重新启动几次。该服务设置为自动...
Blazor server windows 服务sqlite3通信问题
我创建了一个 Blazor 服务器应用程序,除其他外,它还读取和记录 sql3 数据库中的数据。该应用程序在 Visual Studio 中正常工作,但是当我将应用程序托管为 Wi...
连接尝试失败,因为连接方在一段时间后没有正确响应或连接主机未能响应
我正在开发一个 Windows 服务,它从特定的 URL 下载图像。该服务在我的计算机上正确运行,但是当我将其安装在服务器中时,它不会下载图像并且它给出...
Microsoft 是否禁用了为某些服务(例如 Windows Update)设置登录凭据的功能?
我非常确定以下内容可用于将 Windows 更新设置为从管理命令提示符以来宾用户身份登录: sc.exe 配置“Windows 更新”obj=“.\Guest” 怎么...
在 Windows 中将程序作为服务运行时如何初始化 python?
我正在创建一个基于SFL(服务框架库)的服务。当我从控制台工作时,没问题,但是当我通过“sc start MyService”将其作为服务运行时,它会发出致命错误...
Docker 工程师无法启动 | docker桌面在windows中没有正确安装
在 Windows 中安装 docker 桌面的步骤。 https://docs.docker.com/desktop/setup/install/windows-install/ 下载:适用于 Windows 的 Docker 桌面 - x86_64。 对于安装,我尝试过, 克...
我们有一个 .NET 6.0 控制台应用程序,我们希望将其作为 Windows 服务运行,它可以工作,但不记录日志。如果我直接使用 Visual Studio 或 EXE 启动它,它就可以工作。我找到了一些例子......
我正在寻找一种查找特定 Windows 服务的进程 ID 的好方法。 特别是,我需要找到 Windows 附带的默认“WebClient”服务的 pid。它以“
从 Windows 服务将 SignalR 连接到 Hub 服务器时出现问题
我是 ASP.NET Core 和 SignalR 的新手,当然,我使用 Visual Studio Professional 2017 进行了大量实验。 我有一个使用 NuGet 包 Miccrosoft.NETCore 的 .NET Core 2.1 的 MVC 应用程序....
如何将 SignalR 添加到 .NET Core Windows 服务?
我可以找到将其添加到 MVC 的教程,甚至从 2014 年开始,就有一篇文章解释如何将其添加到 .NET 4.7 windows 服务。 然而,对于 .NET Core 3.1 Windows 服务,我只是无法弄清楚...
从多个客户端监视/管理 Windows 服务的最佳策略? (C#)
我有一个Windows服务(.net),它是自定义协议的实现。我需要从多个桌面客户端监控此服务(数据包到达、拒绝、错误等)。 ...
NamedPipeClientStream 无法在没有 UAC 的情况下连接
我正在编写一个可执行文件,通过 NamedPipe 将数据发送到开放进程(Unity 游戏),以使用自定义 URI 方案“模拟”来自浏览器的深层链接。这意味着...
我正在编写一个Windows服务,需要知道机器中当前是否有任何用户登录。 到目前为止,我已经尝试过 Win32_LogonSession (WMI) 和 LsaEnumerateLogonSessions/
“ILoggingBuilder”不包含“AddFilter”的定义
我需要将 .NET 6 控制台应用程序转换为服务。我按照 MS 的样板样本得出了这个结果: 使用 Microsoft.Extensions.Hosting; 使用 Microsoft.Extensions.Logging.EventLog;