问题标签 [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 投票
1 回答
1379 浏览

c# - 尝试在远程/另一台计算机上读取时无法访问 ServiceController (InvalidOperationException)

我有一个本地服务在我的计算机上运行,​​并试图让其他计算机能够读取我的服务的状态(无论是正在运行、已停止等)但是,我无法做到,因为我收到了 InvalidOperationException 错误,说我无法打开服务控制管理器。在本地,我可以,但在另一台远程计算机上我不能。ServiceController (cs) 对象只返回一个对象,其属性都具有 InvalidOperationException 错误。

我尝试关闭其他计算机上的所有防火墙,尝试以管理员权限运行 Visual Studio,但似乎没有任何效果。我注意到其他人建议对您的管理员凭据进行硬编码并使用 WindowsIdentity 和 Impersonation 但这对我的项目不起作用(因为它在我的工作场所不是一个可行的解决方案 - 对于业务逻辑没有意义不想给客户任何内部凭证)。

这是我的代码片段:

错误是这样的:

有谁知道关于如何让其他计算机运行我的 C# 程序以能够读取 ServiceController 对象的任何解决方法?

谢谢!

0 投票
1 回答
465 浏览

.net - System.ServiceProcess.ServiceController.Stop() 是同步的还是异步的?

……还是.Start()就此而言?

MSDN对此只字未提。 没有涉及此问题的相关谷歌搜索结果。 由于某种原因,参考源不包括方法体。

在测试它时,很难说清楚,因为我愿意停止的服务都做得很快。

编辑:我不是在问它是否实现了其中一种异步模式——显然不是;我只是想知道该方法是否发送了停止服务的请求,但不等待收到回复,就像Process.CloseMainWindow().

0 投票
0 回答
159 浏览

vb.net - 更改远程机器上的服务启动类型

我可以在远程机器上获取服务的当前启动类型,但我无法更改它。ServiceController.StartType 属性是只读的。

家伙设法扩展了能够更改 StartUpType 的 ServiceController 类,但它只能在本地工作。新类接受 .MachineName 属性,但我认为它已损坏,因为它找不到指定的 ServiceName。

0 投票
0 回答
1509 浏览

c# - 使用 IPv4 地址和非管理员用户时,ServiceController 无法在 Windows 10 1709+ 上启动服务

我们有一个 Windows 服务,它位于并监控我们的主要 Windows 服务。可以查询服务状态,根据需要停止、启动、重启服务。它使用 .Net 中的ServiceController类来实现。

使用我们的安装程序安装时,可以将服务配置为使用现有的 Windows 用户帐户,或者可以为服务创建新帐户。此用户可以是管理员或非管理员用户。无论哪种方式,安装时,监控服务都配置为自动启动,主服务设置为手动,并且配置的用户帐户被明确授予控制主服务所需的所有权限。我已经仔细检查了 DACL 并确认用户确实有权限。

大多数情况下,这两个服务安装在同一台机器上,但它们也有可能安装在不同的机器上,所以在新建时ServiceController我们传入服务名称和机器的 IP 地址。

问题是,在调用ServiceController.Start()我们得到以下异常:

System.InvalidOperationException:无法在计算机“127.0.0.1”上打开 MyServiceName 服务。---> System.ComponentModel.Win32Exception:访问被拒绝

--- 内部异常堆栈跟踪结束 ---

在 System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)

在 System.ServiceProcess.ServiceController.Start(字符串 [] 参数)

在 System.ServiceProcess.ServiceController.Start() )。

仅当配置的用户是非管理员、使用 IPv4 地址并且自 1709 更新以来仅在 Windows 10 上才会发生这种情况。此异常不会发生在任何先前版本的 Windows 上,包括所有先前版本的 Windows 10(是的,我已经测试了所有这些版本,呃)。似乎在使用机器的主机名或“localhost”时不会发生异常,只有在使用诸如“127.0.0.1”之类的 IPv4 地址或机器的实际 IP 时才会发生异常。

可以使用以下小控制台程序重现该问题:

以非管理员用户身份运行并替换"MyServiceName"为您可以控制的服务的已安装名称。

我真的很想知道导致此问题的 1709 年发生了什么变化,以及除了使用主机名之外是否还有其他方法。

0 投票
0 回答
1760 浏览

c# - 如何在 .NET Standard 项目 (System.ServiceProcess.ServiceController) 中使用 .NET Framework 类

我希望System.ServiceProcess.ServiceController在 .NET Standard 2.0 项目中使用该类。为此,我从 NuGet 下载了 Microsoft.Windows.Compatibility 数据包,其中包括其他内容(我还尝试自己简单地下载 System.ServiceProcess.ServiceController 数据包)。我现在可以在课堂上毫无问题地使用 ServiceController,但是当我尝试运行程序时,我得到:

我想我在这里遗漏了一些重要的东西,特别是因为据我所知,我安装的版本是 4.5.0,而它正在寻找的版本是 4.2.1.0。我究竟做错了什么?

0 投票
1 回答
87 浏览

c# - WMI 没有返回预期的服务,ServiceController 标识 OK

我正在尝试确定远程 PC 上的某个服务是否正在运行并确定其启动类型。

使用 ServiceController 我可以成功地在远程机器上看到预期的服务,但是当切换到使用 WMI 进行更深入的钻取时,该服务不再出现。

这是我的代码:

0 投票
1 回答
212 浏览

c# - 从普通用户角色启动和停止 Windows 服务

就我而言,我有一个 WPF 应用程序,它负责用户交互,并且有一个支持 Windows 服务在后面运行。

我必须仅以普通用户权限(非管理员)执行 WPF 应用程序。由于应用程序必须启动和停止 Windows 服务,所以我得到了“访问级别”异常。

我尝试使用ServiceController类来停止服务,

如果 WPF 应用程序以管理员身份打开,则这部分代码将正确执行。

在同一个解决方案中有一个单独的类库项目,负责访问Windows服务,我尝试添加app.Manifest文件并将角色更改为<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

由于它是一个图书馆项目,因此我没有看到拥有它的任何影响。

另外,我尝试过使用Process

但这只是为了开始这个过程,它可能对我没有用。

或者,我选择编写一个控制台应用程序来操作 Windows 服务状态,在清单中,我将requestedExecutionLevel级别设置为requireAdministrator并将其包含在解决方案中并调用它。(每次执行代码时都会获得 UAC)我不认为这是最好的做法。

有没有更好的方法来以普通用户权限以编程方式停止和启动 Windows 服务。

0 投票
1 回答
35 浏览

vb.net - sc.Pause() 抛出异常

大家好!

我对上面的代码有疑问。当 sc.Pause() 运行时,它给了我一个例外

任何帮助表示赞赏!

谢谢,

凯威克斯

0 投票
1 回答
89 浏览

c# - 如何检测何时可以安全升级我的 Windows 服务?

我有一个轮询数据库的 Windows 服务,它会根据它找到的记录执行操作。

我想将 Azure Devops 设置为自动部署此服务的升级。

为了部署升级,我需要停止服务。

有没有办法告诉我这是否会中断它的处理?

在我的发布管道中,我使用命令任务

[更新]

这是我的简化代码

0 投票
0 回答
26 浏览

c# - 有没有办法以编程方式查找事件日志和生成它们的 Windows 服务?

我在 Visual Studio 2019 中使用 C#。我正在尝试获取系统上当前成功获取的所有 Windows 服务的列表,然后获取与这些服务关联的事件日志,但我无法做到。

我能够获得所有服务,我能够获得所有事件日志。

我一直在尝试找到某种方法将两者联系起来,但我没有想出任何有意义的东西。

我希望找到一种将服务映射到日志或日志到服务的方法。

任何帮助,将不胜感激。谢谢!