c# 远程重启计算机为什么老报RPC服务不可用?

时间:2022-10-12 09:49:50
//首先添加对 System.Management的引用 
//然后代码入下: 
ConnectionOptions op = new ConnectionOptions ( ) ; 
op.Username ="xx";//或者你的帐号(注意要有管理员的权限) 
op.Password = "xx" ; //你的密码 
ManagementScope scope = new ManagementScope( "\\\\" + "106.54.20.1" + "\\root\\wgscd", 
op ) ; 
try 

scope.Connect ( ) ; 
System.Management.ObjectQuery oq = new System.Management.ObjectQuery ( "SELECT * FROM 

Win32_OperatingSystem" ) ; 
ManagementObjectSearcher query1 = new ManagementObjectSearcher ( scope , oq ) ; 
//得到WMI控制 
ManagementObjectCollection queryCollection1 = query1.Get ( ) ; 

foreach ( ManagementObject mobj in queryCollection1 ) 

string [ ] str= { "" } ; 
mobj.InvokeMethod ( "Reboot" , str ) ; 


catch 




服务器的RPC服务我已经开启了!

26 个解决方案

#1


服务器的WMI服务开了没有

#2


服务器的WMI服务是什么?
怎么开?

#3


up

#4


防火墙都关上

#5


防火墙什么的!
我都关掉了!

#6


up

#7


up

#8


你在远程计算机上没有安装客户端,所以需要对方允许你去关机才可以。
这就要求对方打开RPC服务让你可以进去关机

#9


干嘛不用。net的remoting???

#10


引用 8 楼 zteclx 的回复:
你在远程计算机上没有安装客户端,所以需要对方允许你去关机才可以。
这就要求对方打开RPC服务让你可以进去关机


远程计算机上还要装什么客服端??
RPC服务已经打开!!

#11


引用 9 楼 jsntzll 的回复:
干嘛不用。net的remoting???


remoting要怎么做??

#12


急呀!
麻烦各位了

#13


参考:远程关闭别人的电脑:


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

using System.Management; 

namespace Ex18_11 

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
        } 

        private void button1_Click(object sender, EventArgs e) 
        { 
            //指定生成 WMI 连接所需的所有设置 
            ConnectionOptions op = new ConnectionOptions(); 
            op.Username = "administrator";  //远程计算机用户名称 
            op.Password = "";   //远程计算机用户密码 
            //设置操作管理范围 
            ManagementScope scope = new ManagementScope("\\\\" + "192.9.103.114" + "\\root\\cimv2", op); 
            scope.Connect();  //将此 ManagementScope 连接到实际的 WMI 范围。 
            ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
            ManagementObjectSearcher query = new ManagementObjectSearcher(scope, oq); 
            //得到WMI控制 
            ManagementObjectCollection queryCollection = query.Get(); 
            foreach (ManagementObject obj in queryCollection) 
            { 
              // obj.InvokeMethod("ShutDown", null); //执行关闭远程计算机,reboot为重新启动 
                obj.InvokeMethod("Reboot",null); 
            } 
        } 
    } 
}


#14


引用 13 楼 mzjmicrosoft 的回复:
参考:远程关闭别人的电脑:

C# codeusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Management;namespace Ex18_11 
{publicpartialclass Form1 : Form 
    {public Form1() 
        { 
            InitializeComponent(); 
        }privatevoid button1_Click(object sender, EventArgs e) 
        {//指定生成 WMI 连接所需的所有设置            ConnectionOptions op=new ConnectionOptions(); 
            op.Username="administrator";//远程计算机用户名称            op.Password="";   //远程计算机用户密码//设置操作管理范围            ManagementScope scope=new ManagementScope("\\\\"+"192.9.103.114"+"\\root\\cimv2", op); 
            scope.Connect();//将此 ManagementScope 连接到实际的 WMI 范围。            ObjectQuery oq=new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
            ManagementObjectSearcher query=new ManagementObjectSearcher(scope, oq);//得到WMI控制            ManagementObjectCollection queryCollection= query.Get();foreach (ManagementObject objin queryCollection) 
            {// obj.InvokeMethod("ShutDown", null);//执行关闭远程计算机,reboot为重新启动                obj.InvokeMethod("Reboot",null); 
            } 
        } 
    } 
}


要报RPC服务不可用!这个错误!
我在网上查了下!
说是RPC服务没启动!
我服务器的RPC服务是启动了的!

#15


引用 2 楼 heheerwa 的回复:
服务器的WMI服务是什么?
怎么开?


就是这个啊

服务名称: winmgmt
显示名称: Windows Management Instrumentation
描述:提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。

#16


引用 15 楼 wartim 的回复:
引用 2 楼 heheerwa 的回复:
服务器的WMI服务是什么?
怎么开?


就是这个啊

服务名称: winmgmt
显示名称: Windows Management Instrumentation
描述:提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。


这个服务我也是开启的的

#17


up

#18


那这句加过没有
scope.Options.EnablePrivileges = true;

#19



        //
        // 摘要:
        //     获取或设置一个值,该值指示是否需要为连接操作启用用户特权。只有在执行的操作需要启用某种用户特权(例如,重新启动计算机)时,才应使用此属性。
        //
        // 返回结果:
        //     返回一个 System.Boolean 值,该值指示是否需要为连接操作启用用户特权。
        public bool EnablePrivileges { get; set; }

#20


scope.Options.EnablePrivileges = true; 
加上还是报RPC服务
不可用!

#21


应该是权限问题,wmi远程不好用,限制太多,tcp/udp135端口必须可用,没有设过相应的本地ip策略

远程计算机的dcom配置看看,控制面板->管理工具->组件服务>DCOM配置->Windows Management and Instrumentation->属性,里面看看。。

建议是远程计算机做一个window服务监听tcp,这边发一个tcp重启指令,对方的windows自动调用shutdown,只要端口不被禁,就能用

#22


dcom配置里选自定义,然后先把权限都设为最大再说。。。
启动和激活权限->everyone->完全控制
访问权限->self->本地访问允许,远程访问允许A
        ->system->本地访问允许,远程访问允许A
配置权限users组->完全控制允许

#23


按照你说的设置了!
还是报RPC服务部可用!
难道要重启下电脑??

#24


远程计算机做一个window服务监听tcp,这边发一个tcp重启指令
我不知道这边怎么发指令过去?
我试过用webService,
在webService里面写一个方法!是重启的方法!
然后客服端掉用那个方法!
但是不行!

#25


就是随便发一条能代表你这个客户端的指令,比如
客户端发送"AA",远程计算机的一个在listen tcp的windows服务AcceptTcpClient到了,一看是"AA",就重启计算机

#26


引用 25 楼 wartim 的回复:
就是随便发一条能代表你这个客户端的指令,比如
客户端发送"AA",远程计算机的一个在listen tcp的windows服务AcceptTcpClient到了,一看是"AA",就重启计算机

怎么发送?
怎么接受?

#1


服务器的WMI服务开了没有

#2


服务器的WMI服务是什么?
怎么开?

#3


up

#4


防火墙都关上

#5


防火墙什么的!
我都关掉了!

#6


up

#7


up

#8


你在远程计算机上没有安装客户端,所以需要对方允许你去关机才可以。
这就要求对方打开RPC服务让你可以进去关机

#9


干嘛不用。net的remoting???

#10


引用 8 楼 zteclx 的回复:
你在远程计算机上没有安装客户端,所以需要对方允许你去关机才可以。
这就要求对方打开RPC服务让你可以进去关机


远程计算机上还要装什么客服端??
RPC服务已经打开!!

#11


引用 9 楼 jsntzll 的回复:
干嘛不用。net的remoting???


remoting要怎么做??

#12


急呀!
麻烦各位了

#13


参考:远程关闭别人的电脑:


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

using System.Management; 

namespace Ex18_11 

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
        } 

        private void button1_Click(object sender, EventArgs e) 
        { 
            //指定生成 WMI 连接所需的所有设置 
            ConnectionOptions op = new ConnectionOptions(); 
            op.Username = "administrator";  //远程计算机用户名称 
            op.Password = "";   //远程计算机用户密码 
            //设置操作管理范围 
            ManagementScope scope = new ManagementScope("\\\\" + "192.9.103.114" + "\\root\\cimv2", op); 
            scope.Connect();  //将此 ManagementScope 连接到实际的 WMI 范围。 
            ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
            ManagementObjectSearcher query = new ManagementObjectSearcher(scope, oq); 
            //得到WMI控制 
            ManagementObjectCollection queryCollection = query.Get(); 
            foreach (ManagementObject obj in queryCollection) 
            { 
              // obj.InvokeMethod("ShutDown", null); //执行关闭远程计算机,reboot为重新启动 
                obj.InvokeMethod("Reboot",null); 
            } 
        } 
    } 
}


#14


引用 13 楼 mzjmicrosoft 的回复:
参考:远程关闭别人的电脑:

C# codeusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Management;namespace Ex18_11 
{publicpartialclass Form1 : Form 
    {public Form1() 
        { 
            InitializeComponent(); 
        }privatevoid button1_Click(object sender, EventArgs e) 
        {//指定生成 WMI 连接所需的所有设置            ConnectionOptions op=new ConnectionOptions(); 
            op.Username="administrator";//远程计算机用户名称            op.Password="";   //远程计算机用户密码//设置操作管理范围            ManagementScope scope=new ManagementScope("\\\\"+"192.9.103.114"+"\\root\\cimv2", op); 
            scope.Connect();//将此 ManagementScope 连接到实际的 WMI 范围。            ObjectQuery oq=new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
            ManagementObjectSearcher query=new ManagementObjectSearcher(scope, oq);//得到WMI控制            ManagementObjectCollection queryCollection= query.Get();foreach (ManagementObject objin queryCollection) 
            {// obj.InvokeMethod("ShutDown", null);//执行关闭远程计算机,reboot为重新启动                obj.InvokeMethod("Reboot",null); 
            } 
        } 
    } 
}


要报RPC服务不可用!这个错误!
我在网上查了下!
说是RPC服务没启动!
我服务器的RPC服务是启动了的!

#15


引用 2 楼 heheerwa 的回复:
服务器的WMI服务是什么?
怎么开?


就是这个啊

服务名称: winmgmt
显示名称: Windows Management Instrumentation
描述:提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。

#16


引用 15 楼 wartim 的回复:
引用 2 楼 heheerwa 的回复:
服务器的WMI服务是什么?
怎么开?


就是这个啊

服务名称: winmgmt
显示名称: Windows Management Instrumentation
描述:提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。


这个服务我也是开启的的

#17


up

#18


那这句加过没有
scope.Options.EnablePrivileges = true;

#19



        //
        // 摘要:
        //     获取或设置一个值,该值指示是否需要为连接操作启用用户特权。只有在执行的操作需要启用某种用户特权(例如,重新启动计算机)时,才应使用此属性。
        //
        // 返回结果:
        //     返回一个 System.Boolean 值,该值指示是否需要为连接操作启用用户特权。
        public bool EnablePrivileges { get; set; }

#20


scope.Options.EnablePrivileges = true; 
加上还是报RPC服务
不可用!

#21


应该是权限问题,wmi远程不好用,限制太多,tcp/udp135端口必须可用,没有设过相应的本地ip策略

远程计算机的dcom配置看看,控制面板->管理工具->组件服务>DCOM配置->Windows Management and Instrumentation->属性,里面看看。。

建议是远程计算机做一个window服务监听tcp,这边发一个tcp重启指令,对方的windows自动调用shutdown,只要端口不被禁,就能用

#22


dcom配置里选自定义,然后先把权限都设为最大再说。。。
启动和激活权限->everyone->完全控制
访问权限->self->本地访问允许,远程访问允许A
        ->system->本地访问允许,远程访问允许A
配置权限users组->完全控制允许

#23


按照你说的设置了!
还是报RPC服务部可用!
难道要重启下电脑??

#24


远程计算机做一个window服务监听tcp,这边发一个tcp重启指令
我不知道这边怎么发指令过去?
我试过用webService,
在webService里面写一个方法!是重启的方法!
然后客服端掉用那个方法!
但是不行!

#25


就是随便发一条能代表你这个客户端的指令,比如
客户端发送"AA",远程计算机的一个在listen tcp的windows服务AcceptTcpClient到了,一看是"AA",就重启计算机

#26


引用 25 楼 wartim 的回复:
就是随便发一条能代表你这个客户端的指令,比如
客户端发送"AA",远程计算机的一个在listen tcp的windows服务AcceptTcpClient到了,一看是"AA",就重启计算机

怎么发送?
怎么接受?