Я пишу небольшой VBScript, который отключает параметр выключения в меню «Пуск» Windows XP в определенный день недели, а затем снова включает его на следующий день.Сценарий предназначен для запуска при входе пользователя с ограниченными правами.Поскольку у этого пользователя нет прав на изменение реестра Windows, он должен запускаться с учетной записью администратора.Я настроил запланированное задание, которое запускает сценарий из учетной записи администратора с ограниченным входом пользователя , как описано здесь, пункт 5 .Вот проблема: после применения изменений в реестре Windows, я должен перезапустить этот пользователь explorer.exe, чтобы изменения вступили в силу.Мой сценарий не может сделать это.Он может убить explorer.exe, но по какой-то причине не может перезапустить его.Обратите внимание: если я запускаю сценарий непосредственно из учетной записи администратора, изменяя настройки реестра учетной записи администратора и перезапуская учетную запись администратора explorer.exe, сценарий работает безупречно.Вот часть кода:
Option Explicit
Const RegKey = "HKEY_USERS\LIMITED USER SID HERE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoClose"
Const BackupDay = 5 'sunday = 1
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
If Weekday(Date) = BackupDay Then
If WshShell.RegRead(RegKey) = 0 Then
WshShell.Run "msg * __Message Here__"
Wscript.Sleep 500
WshShell.RegWrite RegKey, 1, "REG_DWORD"
RestartExplorer1
' RestartExplorer2
WScript.quit
Else
[...]
Sub RestartExplorer1()
Dim strComputer, strProcessToKill, objWMIService, colProcess, objProcess
strComputer = "."
strProcessToKill = "explorer.exe"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer _
& "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcessToKill & "'")
For Each objProcess in colProcess
objProcess.Terminate()
Next
End Sub
Процедура RestartExplorer1 должна завершить все процессы explorer.exe (включая процесс администратора, все нормально, как и должно быть)вышли из системы, поэтому их не должно быть, кроме того, я мог фильтровать по имени пользователя и убивать только пользователя, но это не проблема), но абсолютно ничего не делает, если запускается из запланированной задачи из учетной записи администратора.RestartExplorer2 не везет:
Sub RestartExplorer2()
WshShell.Run "cmd /c Taskkill /F /IM explorer.exe"
WScript.Sleep 500
WshShell.Run "cmd /c Start explorer.exe"
End Sub
В этом случае explorer.exe действительно убит, но по какой-то причине не перезапущен.Я искал везде безрезультатно.Спасибо за любую помощь, спасибо.