问题标签 [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.
c# - 尝试在远程/另一台计算机上读取时无法访问 ServiceController (InvalidOperationException)
我有一个本地服务在我的计算机上运行,并试图让其他计算机能够读取我的服务的状态(无论是正在运行、已停止等)但是,我无法做到,因为我收到了 InvalidOperationException 错误,说我无法打开服务控制管理器。在本地,我可以,但在另一台远程计算机上我不能。ServiceController (cs) 对象只返回一个对象,其属性都具有 InvalidOperationException 错误。
我尝试关闭其他计算机上的所有防火墙,尝试以管理员权限运行 Visual Studio,但似乎没有任何效果。我注意到其他人建议对您的管理员凭据进行硬编码并使用 WindowsIdentity 和 Impersonation 但这对我的项目不起作用(因为它在我的工作场所不是一个可行的解决方案 - 对于业务逻辑没有意义不想给客户任何内部凭证)。
这是我的代码片段:
错误是这样的:
有谁知道关于如何让其他计算机运行我的 C# 程序以能够读取 ServiceController 对象的任何解决方法?
谢谢!
.net - System.ServiceProcess.ServiceController.Stop() 是同步的还是异步的?
……还是.Start()
就此而言?
MSDN对此只字未提。 没有涉及此问题的相关谷歌搜索结果。 由于某种原因,参考源不包括方法体。
在测试它时,很难说清楚,因为我愿意停止的服务都做得很快。
编辑:我不是在问它是否实现了其中一种异步模式——显然不是;我只是想知道该方法是否发送了停止服务的请求,但不等待收到回复,就像Process.CloseMainWindow()
.
vb.net - 更改远程机器上的服务启动类型
我可以在远程机器上获取服务的当前启动类型,但我无法更改它。ServiceController.StartType 属性是只读的。
这家伙设法扩展了能够更改 StartUpType 的 ServiceController 类,但它只能在本地工作。新类接受 .MachineName 属性,但我认为它已损坏,因为它找不到指定的 ServiceName。
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 年发生了什么变化,以及除了使用主机名之外是否还有其他方法。
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。我究竟做错了什么?
c# - WMI 没有返回预期的服务,ServiceController 标识 OK
我正在尝试确定远程 PC 上的某个服务是否正在运行并确定其启动类型。
使用 ServiceController 我可以成功地在远程机器上看到预期的服务,但是当切换到使用 WMI 进行更深入的钻取时,该服务不再出现。
这是我的代码:
c# - 从普通用户角色启动和停止 Windows 服务
就我而言,我有一个 WPF 应用程序,它负责用户交互,并且有一个支持 Windows 服务在后面运行。
我必须仅以普通用户权限(非管理员)执行 WPF 应用程序。由于应用程序必须启动和停止 Windows 服务,所以我得到了“访问级别”异常。
我尝试使用ServiceController
类来停止服务,
如果 WPF 应用程序以管理员身份打开,则这部分代码将正确执行。
在同一个解决方案中有一个单独的类库项目,负责访问Windows服务,我尝试添加app.Manifest
文件并将角色更改为<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
由于它是一个图书馆项目,因此我没有看到拥有它的任何影响。
另外,我尝试过使用Process
,
但这只是为了开始这个过程,它可能对我没有用。
或者,我选择编写一个控制台应用程序来操作 Windows 服务状态,在清单中,我将requestedExecutionLevel
级别设置为requireAdministrator
并将其包含在解决方案中并调用它。(每次执行代码时都会获得 UAC)我不认为这是最好的做法。
有没有更好的方法来以普通用户权限以编程方式停止和启动 Windows 服务。
vb.net - sc.Pause() 抛出异常
大家好!
我对上面的代码有疑问。当 sc.Pause() 运行时,它给了我一个例外
任何帮助表示赞赏!
谢谢,
凯威克斯
c# - 如何检测何时可以安全升级我的 Windows 服务?
我有一个轮询数据库的 Windows 服务,它会根据它找到的记录执行操作。
我想将 Azure Devops 设置为自动部署此服务的升级。
为了部署升级,我需要停止服务。
有没有办法告诉我这是否会中断它的处理?
在我的发布管道中,我使用命令任务
[更新]
这是我的简化代码
c# - 有没有办法以编程方式查找事件日志和生成它们的 Windows 服务?
我在 Visual Studio 2019 中使用 C#。我正在尝试获取系统上当前成功获取的所有 Windows 服务的列表,然后获取与这些服务关联的事件日志,但我无法做到。
我能够获得所有服务,我能够获得所有事件日志。
我一直在尝试找到某种方法将两者联系起来,但我没有想出任何有意义的东西。
我希望找到一种将服务映射到日志或日志到服务的方法。
任何帮助,将不胜感激。谢谢!