??远程重起和关闭计算机-------不一定高手都能解决,而且还要会分析的问题??

0956304127832708 2003-08-21 05:25:45
Dim co As New ConnectionOptions()
co.Username = "lizheng"
co.Password = "iamlizheng"
Dim ms As New System.Management.ManagementScope("\\192.168.0.254\root\default", co)
'查询远程计算机
Dim oq As New System.Management.ObjectQuery("select * from Win32_OperatingSystem") 'SELECT * FROM Win32_Share
Dim query1 As New ManagementObjectSearcher(ms, oq)
Dim queryCollection1 As ManagementObjectCollection = query1.Get
Dim mo As ManagementObject
Dim ss() As String
Dim x As Integer = 1
For Each mo In queryCollection1 '40行
mo.InvokeMethod("Reboot", ss)
Console.WriteLine(mo.ToString())
Next

异常详细信息: System.Management.ManagementException: 无效类别
源错误:
行 38: mo.InvokeMethod("Reboot", ss)
行 39: Console.WriteLine(mo.ToString())
行 40: Next
行 41: End Sub
行 42: End Class
源文件: D:\公司网站\webtest\Administrator\manageuser\远程控制\远程关机.aspx.vb 行: 40

怎么回事啊?怎么解决啊?其它的都没有问题,我测试过的,上面的代码。绝对没有问题。
...全文
22 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
layershow 2003-08-21
  • 打赏
  • 举报
回复
前面猜的可能错了.
我对目标机 XP professional 测试成功。
下面是代码:
拿C#写了一下.后来改成VB.NET也没问题:

C# :
ConnectionOptions ConOptions = new ConnectionOptions();
ConOptions.Username = "{AdminUser}";
ConOptions.Password = "{myPassword}";
ConOptions.EnablePrivileges = true;
ManagementScope scope = new ManagementScope("\\\\{Target}\\root\\cimv2", ConOptions);
scope.Connect();
ObjectQuery OQuery = new ObjectQuery("Select * From Win32_OperatingSystem Where Primary = true");
ManagementObjectSearcher OSearcher = new ManagementObjectSearcher(scope, OQuery);
foreach(ManagementObject MO in OSearcher.Get())
{
MO.InvokeMethod("Reboot", null);
}
MessageBox.Show("Restart?");

VB.NET:

Dim ConOptions As ConnectionOptions = New ConnectionOptions
ConOptions.Username = "{AdminUser}"
ConOptions.Password = "{myPassword}"
ConOptions.EnablePrivileges = True
Dim scope As ManagementScope = New ManagementScope("\\{Target}\root\cimv2", ConOptions)
scope.Connect()
Dim OQuery As ObjectQuery = New ObjectQuery("Select * From Win32_OperatingSystem Where Primary = true")
Dim OSearcher As ManagementObjectSearcher = New ManagementObjectSearcher(scope, OQuery)
Dim MO As ManagementObject
For Each MO In OSearcher.Get()
MO.InvokeMethod("Reboot", Nothing)
Next
MessageBox.Show("Restart?")

ConnectionOptions 的 EnablePrivileges 属性要设为True 启用特权操作
将管理员用户密码和目标机替换代码中相应位置即可
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
若要授予 ASP.NET 对文件的写访问权,这个对文件的文件名是哪个啊?应该是在服务器上的。
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
在服务器下有这种错误提示。看来确实是要在服务器上远程控制。
异常详细信息: System.UnauthorizedAccessException: 拒绝访问。

未授权此 ASP.NET 进程访问所请求的资源。出于安全原因,默认的 ASP.NET 进程标识为“{machinename}\ASPNET”,它只具有有限的特权。请考虑授予该 ASP.NET 进程标识访问此资源的权限。

若要授予 ASP.NET 对文件的写访问权,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”以添加“{machinename}\ASPNET”用户。突出显示此 ASP.NET 帐户,在“允许”列中选中“写”框。
怎么做啊。在服务器哪有文件右击啊?
怎么做啊。在服务器哪有文件右击啊?
怎么做啊。在服务器哪有文件右击啊?
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
那怎么办,各位兄弟可否帮我一试啊。我只想知道,代码有没有错!
layershow 2003-08-21
  • 打赏
  • 举报
回复
我去查MSDN了

贴下来:
Win32_OperatingSystem.Reboot
The Reboot WMI class method shuts down the computer system, then restarts it. On computers running Windows NT/Windows 2000, the calling process must have the SE_SHUTDOWN_NAME privilege.

This topic uses Visual Basic® syntax. For information about using this method with C/C++, see Calling a Method.

Function Reboot() As Integer
Parameters
This method has no parameters.
Return Values
Returns zero (0) to indicate success. Any other number indicates an error.

Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0 SP4 and later.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server 4.0 SP4 and later.
Header: Declared in Cimwin32.mof.
Namespace: Included in \root\cimv2.

看Requirements里面
Client 可以是 professional
Server 连 Windows XP 都不包括在内。可见只有Server 平台的操作系统支持此方法

但是代码我也没试过。只是猜一下

在MSDN 2003中的位置是这里:
ms-help://MS.MSDNQTR.2003FEB.2052/wmisdk/wmi/reboot_method_in_class_win32_operatingsystem.htm
bobjeey 2003-08-21
  • 打赏
  • 举报
回复
foreach ( mangementobject mo in querycollection)
{
if (mo!=null)
{
...
}
}
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
If queryCollection1 Is Nothing Then
Response.Write("<script>alert('queryCollection1 is null');</script>")
End If
我测试了一下,queryCollection1的值不为空。
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
有谁帮我确定一下错误源咯?如果万一是楼上兄弟所说是服务器的问题,我就没有办法了,我这里的服务器管理员密码我是不知道的。
layershow 2003-08-21
  • 打赏
  • 举报
回复
我是指对方机.应该是Server
layershow 2003-08-21
  • 打赏
  • 举报
回复
OK.对于Reboot方法
我猜professional应该不行
找一台window 2000 Server 去试一下.
如果还不行,我可以复制你的代码测试
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
说真的,你们问的问题都不对,根本与那些无关,我现在反复活测试,只是
For Each mo In queryCollection1 异常详细信息: System.Management.ManagementException: 无效类别
不知为何?
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
对方是window 2000 professional ,the same to me!
layershow 2003-08-21
  • 打赏
  • 举报
回复
对方机器操作系统版本是...?
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
那怎么解决啊?
panyee 2003-08-21
  • 打赏
  • 举报
回复
取得的queryCollection1 可能为空
0956304127832708 2003-08-21
  • 打赏
  • 举报
回复
不对,lizheng是管理员。你看看错误啊。根本就不是错在用户、密码上,这个是没有问题的,是错在内40行,我有作标记的,你看看
panyee 2003-08-21
  • 打赏
  • 举报
回复
非管理员?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧