问题标签 [servicecontroller]

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 投票
3 回答
2260 浏览

windows-services - 卸载时自动停止 Windows 服务

安装我的服务后,我有一个处理程序,它在安装后启动服务。

我想在卸载之前停止服务,所以我向 InitializeComponent() 添加了一个额外的处理程序。

并添加了功能:

但是该服务在卸载之前不会停止。我是否不正确地使用了 ServiceController.Stop() 函数?

0 投票
2 回答
1486 浏览

c# - 如何设置安全性以远程停止和启动 WCF 服务?

这是一篇很长的帖子,所以这是我的问题的主要内容:我想使用 C# 中的 ServiceController 类来控制另一台计算机上的服务,但看起来我需要在服务主机上模拟一个帐户遵守 .NET 如何管理安全性。我怎么做?


细节:

我们有一些 WCF 服务托管在服务器和依赖于它们的客户端应用程序上。(一切都是用 .NET 4.0 C# 编写的。)客户端上有一个仪表板,显示哪些服务正在运行,如果有任何服务出现故障,我们希望让用户尝试远程重新启动它们。经过一番研究,看起来 ServiceController 可以做我们希望的事情。我已经开始玩它了,这就是我到目前为止所写的:

显然,这实际上并没有重新启动服务。我想我知道如何使用ServiceController.Start().Stop().当执行这么多代码时,但是,在调用时会引发异常GetServices()

我对此进行了一些研究并发现了这些线程:
如何使用 ServiceController 远程控制 Windows 服务?
http://social.msdn.microsoft.com/Forums/en-US/clr/thread/18c34a5c-8637-4e85-b9ee-d9052bb12a34/
Windows 7 服务控制器权限中的 ServiceController
权限
http://social.msdn.microsoft.com /论坛/en/wcf/thread/c35e75c4-de7d-409d-bc82-4533e4982264

我从他们那里收集到的是,当 ServiceController 与服务交互时,它需要具有适当的权限才能与它们对话。我发现的文章建议在服务器上模拟具有适当权限的用户帐户。

不幸的是,我对 .NET 如何管理安全问题完全陌生,所以我不知道该怎么做。所以这是我的问题:
1. 在服务器上模拟帐户是解决此问题的适当方法吗?我阅读的线程中的一个人认为它引发了太多安全漏洞。
2. 如何模拟账户?某处有一篇文章有​​一个很好的代码示例吗?
3. 有什么方法可以在不配置服务器和客户端计算机的情况下模拟用户?我们在客户的环境中设置我们的系统,我不想在安装中添加一个晦涩的步骤。

编辑:根据 AvkashChauhan 的回答,我们的 WCF 服务作为 Windows 服务托管。

0 投票
2 回答
1500 浏览

.net - 使用 AssemblyInstaller 安装后找不到服务

语境

Windows 2008 64 位。
我安装了一个充当安装程序的 .NET 服务。

背景

我正在使用此代码(来源:Marc Gravell)来安装服务:

问题

一切正常,没有例外,但在那之后,我尝试运行以下代码来启动刚刚安装的服务:

我得到一个例外:

我不明白为什么,因为:

  1. ServiceInstaller服务的名称与(在ServiceName属性中)中的名称完全相同
  2. 代码在不同的服务中执行,该服务在 本地系统帐户下运行。
0 投票
1 回答
687 浏览

wix - 'wix 在管理员卸载前执行批处理

我的 WiX XML 文件安装了包含名为 OLOLO_SERVICE 的 Windows 服务的应用程序(例如)。我想在安装/重新安装我的应用程序时停止此服务。

我使用带有 ExeCommand='sc stop OLOLO_SERVICE' 的 CustomAction。

<InstallExecuteSequence> 标签里面是动作

但这不起作用,卸载程序显示此窗口“要继续卸载,您应该停止关注可执行文件”(可能不是 100% 正确,因为在我的俄语 Windows 7 中它是用俄语编写的)。

我认为可能的原因是

  • 脚本在获得管理员权限之前运行(并且停止服务失败,因为它需要管理员权限)
  • 脚本在验证后运行(检查已安装的可执行文件时验证失败)

请帮帮我,我想使用批处理“sc stop OLOLO_SERVICE”停止服务

PS。我决定简化一个问题:我希望我的 WiX 在检查正在运行的应用程序之前以管理员权限执行“sc stop OLOLO_SERVICE”

0 投票
1 回答
1320 浏览

c# - How to stop a windows service that has multiple threads cannot be stopped

I have a windows service written in C# that creates multiple threads, and some threads have legacy code and I don't have enough time/access to legacy code to wait for all these threads to stop before OnStop() completes. Again at some point I dont have references to all threads as there are legacy codes. Now I want to update the service dynamically. So I start a different Updater service from my Job service. The Updater service will stop the Job service, download Job service exe and other dlls, replace these with old service exe, and dlls, and finally would restart the Job service. Upon start, Job service will stop the Updater service.

Now when the Updater service stops the Job service using ServiceController.Stop(), and also calls ServiceController.WaitForStatus(ServiceControllerStatus.Stopped), the Job service stops, but the some legacy threads spawned from Job service may not stop at that moment, and as a result the Job service exe cannot be updated.

I really dont find any good solution yet. The best solution could have been to use WaitHandles (AutoResetEvent/ManualResetEvent) to wait for all threads to finish, which is not happening. Or may be all threads could have been forcefully aborted which also seems critical. Another undesired solution could be to find all threads running in the service process and terminate/abort all threads which is not straightforward and also not a preferable solution at all. I was hopeful to use Environment.Exit in OnStop() but found that it causes Windows to show a bad alert message saying Process terminated unexpectedly (error 1067) which I have not been able to resolve at all.

Now I am confused what should be done at this moment in a short time without touching the legacy code. Any help would be appreciable.

0 投票
0 回答
1171 浏览

c# - 使用 ServiceController 或其他以编程方式创建非托管内核驱动程序服务

我有一个 C/C# 混合项目,由一个用 C 编写的内核驱动程序和一个用 C# 编写的应用程序组成。现在,要创建内核驱动程序服务并运行它,我将本机 API OpenSCManager 和 CreateService 与互操作服务一起使用,代码片段是:

但我想(如果可能的话)让这个完全管理,只有用 C 编写的驱动程序并依赖系统 API/natives/whatever。

我知道如何使用 ServiceController 来管理(启动/停止/等)已安装的 Windows 服务,但我不知道如何使用它(或任何其他类)为内核驱动程序创建服务。

谢谢你的帮助。

0 投票
2 回答
1946 浏览

.net - ServiceController.ExecuteCommand:如何取回数据

在 .NET 中,该类允许您使用该方法ServiceController向服务发送自定义命令。ExecuteCommand

我希望能够查询服务的状态(状态的自定义概念,而不是“开始/停止”种类)。我希望使用类似的方法调用服务ExecuteCommand并获得指示状态的返回值会很简单。有什么东西ServiceController可以让我做到这一点吗?

假设不是,我想我必须使用某种外部进程间通信技术(例如,服务将其状态写入数据库或消息队列)。为了简单起见,您会推荐什么?

0 投票
1 回答
671 浏览

c# - 你知道ServiceController类(C#)的任何替代品吗

问题是,一旦我们尝试启动它,我们没有办法“取消”一个缓慢/永不启动的服务,如果它花费太长时间:

假设我们将“ts”设置为太长,例如 300 秒,在等待 120 秒后我决定取消操作,我不想等待服务控制器状态更改或等待超时发生, 我怎样才能做到这一点?

0 投票
1 回答
301 浏览

c# - sc.exe 配置在 Windows 服务的 OnStart 中更改凭据

我想从数据库中提取服务的凭据(更加动态)

在对服务调用 .Start() 之前,我正在使用 sc.exe 更改 OnStart 中的凭据。
sc.exe 更改有效,但我注意到它直到我再次重新启动后才生效。

即,我注意到它是 SYSTEM 作为它运行的用户。一旦我再次重新启动,它就会显示我的域帐户。

有没有其他方法可以更改允许我在 OnStart 实际运行之前在内部执行它的凭据?

谢谢,大卫

0 投票
1 回答
5383 浏览

c# - 无法在 .NET 3.5 中使用 ServiceController 停止服务

我在 .NET 3.5 中工作,并且在使用 ServiceController 停止某些服务时遇到了问题。我搜索了整个互联网,但没有找到解决问题的方法;)

我是这样做的:

我正在等到我的服务停止。然后我想替换它的库(更新它)。并抛出异常:

UnauthorizedAccessException 异常详细信息:System.UnauthorizedAccessException:对路径“blablabla”的访问被拒绝。

我确定我可以访问此路径,因为我以管理员身份运行我的应用程序。

有趣的是,当这段代码执行时,该服务从当前服务列表中消失(在任务管理器中)。所以它实际上停止了它,但是一些线程仍然必须使用它,所以我不能移动任何服务的文件。即使我尝试自己移动文件(我转到服务目录并尝试使用鼠标移动其文件)我也做不到。但是当我手动停止服务(任务管理器和“结束任务”)时,我可以对它的文件做任何我想做的事情。那么从 C# 代码(使用 ServiceController)停止它和使用任务管理器停止它有什么区别?

我不知道这是否重要,但我在 Virtual Box 的 Windows Server 2008 上运行此应用程序(和此服务)。(我需要在其他机器上运行它,然后是我的电脑)。

有什么想法可以解决这个问题吗?;)

谢谢你的帮助。

最好的祝愿,皮特。