惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
月光博客
月光博客
M
MIT News - Artificial intelligence
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网

博客园 - yzx99

哈希表用于Key与Value的对应 一次让代码更适应变化的经历(续) 一次让代码更适应变化的经历 错误提示与实际问题不符合的案例之一 C#中控件数组的讨论 C#下水晶报表打印自定义纸张 设计模式应用之一:控件清空 自定义StyleCop规则 恢复数据工具比较 SQL公式一直设不成功 不把text或image字段放最后的后果 要显示ASP调试信息,要把IE友好错误去掉 WMI的几种写法 - yzx99 - 博客园 VB6设置进度条颜色 - yzx99 - 博客园 判断ListView双击了子项,并获取其位置与大小 VB6实现ListView各行间隔颜色 - yzx99 - 博客园 SQL查询优化一小例 让普通用户查询安全日志 WMI代码运行错误:80041003
计算机重启脚本 - yzx99 - 博客园
yzx99 · 2009-05-10 · via 博客园 - yzx99

方案一:
  Set oShell = WScript.CreateObject ("WSCript.shell")
  oShell.run "shutdown -r -f -t 1", true
存在的问题:
ShutDown是XP的命令,因此该脚本在WIN2K下不能运行。
即使在XP下,仅适用于超级用户,普通用户在DOS下执行后会提示:
操作成功完成。
客户端没有所需的特权。
(如果把ShutDown拷贝到WIN2K下,普通用户也是这个提示)
因此该脚本无法在普通用户下实现重启,实用度:2。

严格地说,普通用户想用shutdown,则必须要有两个权限:关闭系统(SeShutdownPrivilege)、从远端系统强制关机(SeRemoteShutdownPrivilege)。可以通过Tokenmon来验证这一点,并且通过对INTERACTIVE组加上远程关机权限来解决问题。2009-05-10的03640号日志中有更详细的说明。另外,我们常用的procexp.exe(Process Explorer)也可以看出某个程序所具有的权限。

方案二:
shutdown有问题,则换成其它关机命令试试,如:rundll32 shell32,SHExitWindowsEx 2
但在,在WIN2K与XP下,得到的结果都是:
shell32 出错
丢失条目: SHExitWindowsEx

另一个用于Win98的命令也搬过来:rundll32 user.exe,RestartWindows
XP运行的提示为:
应用程序或 DLL C:\WINDOWS\system32\user.exe 为无效的 Windows 映像。请再检测一遍您的安装盘。
加载 user.exe 时出错
%1 不是有效的 Win32 应用程序。
WIN2K下运行,则没有这些提示,但是也没有任何效果。

改为user32.exe,则XP与WIN2K都提示:
加载 user32.exe 时出错
找不到指定的模块。

在XP下试成功:rundll32 shell32,#59
提示:@#$%必须重新启动计算机才能使新的设置生效。
想现在就重新启动计算机吗?
但点击“是”,却没重启。并且提示信息我们实际需要更改。

实用度:0

方案三:
显示关机对话框
  set oApplication = CreateObject("Shell.Application.1")
  oApplication.ShutdownWindows()
虽然它可以在WIN2K与XP运行得很好,但它只是显示关机的对话框,剩下,要关机、重启、或注销,是用户来选择,“确定”也是用户来点击。网络上有使用发送光标上下移动键,以及回车来实现自动重启功能。自己感觉不是个好办法。

实用度:1

方案四:
用批处理实现重启
@echo off
setlocal
cd/d %temp%
echo [version] > reboot.inf
set inf=InstallHinfSection DefaultInstall
echo signature=$chicago$ >> reboot.inf
echo [defaultinstall] >> reboot.inf
rundll32 setupapi,%inf% 1 %temp%\reboot.inf
del reboot.inf
以上代码学习的地方是很多,包括:setlocal、cd/d、rundll32 setupapi。但在WIN2K与XP下,普通帐号运行的结果都是:安装失败。所以没有重启成功。而超级用户却正常。估计是要对注册表HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce要有完全控制权限。

实用度:1

方案五:
WMI
代码如下:
Set oWMI = GetObject("winmgmts:" & _
                     "{impersonationLevel=impersonate,(Shutdown)}!" & _
                     "\\." & _
                     "\root\cimv2")
Set cOSs = oWMI.ExecQuery("Select * from Win32_OperatingSystem")
For Each oOS in cOSs
  oOS.Reboot()
Next

它对WIN2K与XP都适用。
最后就用它了。