我有一个代码试图访问另一台计算机的服务。
try
{
var serviceName = "MyService";
var ip = "10.10.11.16";
var username = "SomeUser";
var password = "APassword";
var connectoptions = new ConnectionOptions();
connectoptions.Impersonation = ImpersonationLevel.Impersonate;
connectoptions.Authentication = AuthenticationLevel.Packet;
connectoptions.EnablePrivileges = true;
connectoptions.Username = username;
connectoptions.Password = password;
var scope = new ManagementScope("\\\\10.10.11.16\\root\\cimv2");
scope.Options = connectoptions;
var query = new SelectQuery("select * from Win32_Service where name = '" + serviceName + "'");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
var collection = searcher.Get();
foreach (ManagementObject service in collection.OfType<ManagementObject>())
{
if (service["started"].Equals(true))
{
service.InvokeMethod("StopService", null);
BtnStartStop.Content = "Stop";
LblService.Content = serviceName;
LblServiceStatus.Content = "Stopped";
}
else
{
service.InvokeMethod("StartService", null);
BtnStartStop.Content = "Stop";
LblService.Content = serviceName;
LblServiceStatus.Content = "Running";
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
这仅适用于服务器和客户端吗?不能在常规PC上运行到另一台常规PC上吗?每次我执行以下操作时,都会进入以下部分:
var collection = searcher.Get();
我得到
的错误访问被拒绝。 (来自HRESULT的异常:0x80070005 (E_ACCESSDENIED))
您有想法进行这项工作吗?谢谢。
一步一步完成 按照
上的说明进行操作https://docs.microsoft.com/en-us/windows/win32/wmisdk/connecting-to-wmi-remotely-starting-with-vista
以管理员权限键入cmd
netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes
为了确保安全,我甚至关闭了防火墙。
编辑了我与此连接的PC的注册表:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ WBEM \ CIMOM \ AllowAnonymousCallback
Data type REG\_DWORD
对于防病毒软件,我连接的电脑没有任何防病毒软件。
我仍然遇到相同的错误。