我需要检查和编辑Windows服务的StartName
。
我已经通过WMI API建立了该解决方案:
using (var service = new ManagementObject($"Win32_Service.Name = '{my_name}'"))
{
using (var inParams = service.GetMethodParameters("Change"))
{
inParams["StartName"] = value;
ManagementBaseObject outParams = service.InvokeMethod("Change", inParams, null);
outParams.Dispose();
}
}
当我使用已被启动为管理员的Visual Studio通过新的控制台项目应用程序调用此代码时,它运行正常。
但是当我由登录为LocalSystem的Windows服务调用它时,出现了一个异常:
System.Management.ManagementException:提供程序加载失败。在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus System.Management.ManagementObject.InvokeMethod(String中的errorCode) methodName,ManagementBaseObject inParameters,InvokeMethodOptions 选项)...
在这种情况下我错过了什么?
Windows服务编辑服务StartName
时必须更改什么权限/应用程序状态或必须更改什么?
答案 0 :(得分:0)
我认为更好的方法是更改te注册表中的名称。您可能必须以管理员身份启动Visual Studio。链接:https://stackoverflow.com/a/3887455/637840
WMI上的Change()
方法有很多不必要的开销。您可能在某些参数上犯了一个错误,并且可能您的服务寄存器将被破坏。查看只需通过WMI更改名称所需设置的所有内容:https://docs.microsoft.com/es-es/windows/desktop/TermServ/win32-terminalservice-change
无论如何,如果您需要使用WMI一定要这样做。您可以使用ORMi。您在回购中有一个教程,它将向您展示如何进行方法工作。
您也可以将其用作参考:https://medium.com/@luque.nicolas/compare-ormi-and-traditional-net-wmi-implementation-f00db26d10a3