问题标签 [topshelf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3888 浏览

c# - 当取消键 (CTRL+C) 按下强制停止服务时,控制台中的 Topshelf

当我在控制台中调试它时,我希望 Topshelf 停止我的服务。

我的代码:

但是当我按下CTRL+C它时它会挂起Microsoft.VisualStudio.HostingProcess.HostProc.WaitForThreadExit

当我按下时CTRL+C,我希望host => host.StopService()立即调用它。

那可能吗?

0 投票
1 回答
840 浏览

rabbitmq - 使用 Windsor 集成时从未调用过 MassTransit Consumer

我似乎无法通过 RabbitMQ 让 Castle Windsor Integration 为 Mass Transit 工作。在我将温莎引入图片之前,一切都很好。我引用了 Castle.Windsor 3.2 和 MassTransit.WindsorIntegration 2.9 并配置了容器以在我的应用程序中使用。我正在通过以下方式注册 MassTransit 消费者:

当我在运行此行后调试和检查容器时,我可以看到它成功注册了所有消费者以及我的所有其他组件。然后我有以下代码来初始化和注册服务总线:

我正在使用LoadFrom(IWindsorContainer container)MassTransit.WindsorIntegration 提供的扩展方法。

到目前为止,我发现的所有示例都停在这里,并表明这是您应该做的所有事情。对我来说不幸的是,我的消费者从未被调用,消息只是堆积在队列中(最终超时并进入错误队列)。消息完全显示在消费者队列中的事实(+ 我看到一个消费者通过 RabbitMQ 管理工具绑定到队列)向我表明消费者可能被正确订阅 - 所以我不确定在哪里问题出在。

我为 Windsor 和 MassTransit 添加了 NLog 日志记录,但日志中没有显示任何错误。我不确定此时我应该如何进行故障排除。有任何想法吗?

此外,这个应用程序目前只是一个使用 Topshelf 进行开发的控制台应用程序。最终它将作为 Windows 服务安装。不确定这是否相关,但我想我会提到它以防万一。

更新

作为一个测试,我创建了一个非常简单的消费者,它带有一个无参数的构造函数来处理一个非常简单的测试消息。这个消费者被成功调用!然而,“真正的”消费者具有需要通过构造函数注入它们的依赖项。我希望 Container 能解决这些问题,但显然它遇到了一些麻烦。奇怪的是,日志中没有显示任何关于它的内容。敬请关注...

0 投票
1 回答
664 浏览

psexec - 无法使用 psexec 远程运行 TopShelf 安装

我正在尝试在远程机器上安装 Windows 服务。该服务是使用 TopShelf 实现的。我正在运行以下 psexec 命令:

我收到的错误是:错误 - 服务异常终止 Topshelf.HostConfigurationException:服务未正确配置:[失败]命令行找到未知的命令行选项:参数:“安装”

看来我没有运行 TopShelf 安装程序,而是执行我的 exe 并传递不是有效参数的“安装”。

任何帮助表示赞赏!

0 投票
2 回答
3025 浏览

powershell - 尝试通过 Powershell / MSBuild 远程停止时找不到服务

作为我们持续集成构建过程的一部分,我有一项任务是将使用 Topshelf 创建的两个 Windows 服务部署到测试服务器。

我的 MSBuild 目标文件如下:

这将执行位于项目内名为 ServiceStop.ps 的同一文件夹中的 Powershell 脚本(好吧,几行):

问题

当我从 TFS 中对新构建进行排队时,脚本确实成功执行;但是,该 get-service命令无法找到有问题的服务 - 尽管它确实存在并且正在运行。构建日志中的具体错误如下:

当脚本从我的机器本地运行时,远程机器上的服务被发现并成功停止,让我认为这是某种权限问题。

我试过的

我对 Powershell 的经验非常有限。我读到凭据可以存储在 Powershell 对象中,如下所示:

但是,似乎get-service没有任何方法可以将凭据传递给它。

我还尝试使用 PSExec 远程启动和停止服务,但遇到了类似的问题。

我复习的一些问题

在不提示输入密码的情况下使用 PowerShell 凭据

Powershell停止服务错误:找不到具有服务名称的任何服务

Powershell Get-WmiObject 访问被拒绝

保存凭据以供 powershell 重用和错误 ConvertTo-SecureString : Key not valid for use in specified state

我在这个问题上花费的时间比我真正能承受的要多,所以如果有任何帮助/指导/评论可能会有所帮助,我将不胜感激。

谢谢!

更新

我能够确认 Powershell 脚本正在接收来自 MSBuild 任务的信息,因为日志显示了 Powershell 输出。

但是,我没时间找到解决方案,而是通过将更新的服务二进制文件放到目标服务器上并编写了一个从那里安装它们的 Powershell 脚本来解决这个问题。

非常感谢那些对这个问题发表评论的人。

0 投票
1 回答
2866 浏览

c# - 调用 TopShelf.HostFactory.Run 后获取 ServiceName/Instance

有没有办法在调用 TopShelf.HostFactory.Run() 后将 ServiceName 和 InstanceName 提供给 TopShelf 服务?

一种选择是直接从命令行参数中提取它。

但是好奇它是否 TopShelf 本身暴露了这些属性。

在挖掘 TopShelf 的来源后,没有看到暴露的点/属性。

0 投票
1 回答
7513 浏览

c# - 使用 Topshelf 时服务没有及时响应启动或控制请求

我正在尝试创建一个依赖于命令行输入的顶级服务。但是当使用命令行参数的配置时,服务不能“及时启动”。

我的服务配置:

如果我删除语言设置的配置并对值进行硬编码,服务启动就好了......有什么想法吗?

这是堆栈跟踪:

0 投票
1 回答
112 浏览

c# - 控制台应用程序到服务

我正在开发一个使用外汇 API 的项目。

所以基本上,她做了什么:循环检查是否存在新值,如果存在,则将其放入 MongoDB 集合中。如果没有,请继续循环。

我的控制台工作得很好,但我需要做的是让它作为服务工作。

我做了什么:

  • 我已经创建了我的 InstallerService 和我的 Service1.cs
  • 我在入口点中使用了 (Environement.UserInterface) 以使其作为控制台应用程序工作,从而使调试变得轻松,并作为服务。

当我使用 installutil.exe 时,它​​完美地完成并出现在我的 service.msc 中。我可以启动和停止它。

但是,他似乎没有收到任何数据,所以,不要在基地里放任何东西。虽然它作为控制台应用程序工作得非常好。

所以,如果有人知道它可能来自什么。我会感谢一些帮助。

0 投票
1 回答
137 浏览

.net - Updated example of using Stact

I see many references to using Stact to implement ActorModel in C#. But I don't see any recent examples, and the documentation makes it hard to figure out what is the pit of success (which is unfortunate because TopShelf and MassTransit both have decent documentation). Are there any updated usage examples that go past the simple Receive examples, an integrate with something like an IoC container to create concrete Actor classes?

0 投票
1 回答
3695 浏览

windows-services - 让 Topshelf 服务在启动时运行一次,然后停止

我编写了一个 TopShelf 服务/控制台应用程序,它似乎按预期运行,除了我希望它在启动时运行一次,然后禁用自身直到下一次启动/重新启动。

我希望这会奏效:

但这不起作用,大概是因为 this.Stop() 命令用于清理,而不是导致服务停止。

我的 Program.cs 看起来像这样:

如何在执行结束时停止服务?

更新:根据 Damien 的意见,我现在有:

和更新的 Program.cs

但是,这不会编译。我的编译器建议在我的注释上(或周围)缺少“)”(如上面的代码所示),但添加右括号只会添加到错误列表中。

我觉得我很接近了……有什么想法吗?

0 投票
6 回答
19381 浏览

c# - 如何捕获异常并停止 Topshelf 服务?

我有一个 topshelf windows 服务,我想在其中进行一些检查(即是否存在 xml 文件),如果检查失败,我需要停止 windows 服务。

所以我尝试在 Start() 方法中进行检查,然后引发异常:

但是,Windows 服务在异常之后作为一个进程保留,然后我必须在任务管理器中手动终止。

如果某些条件(即找不到文件)成立,有没有办法不运行服务?