2011-08-10 4 views
0


Windows XP 시작 메뉴의 특정 요일에 종료 옵션을 사용하지 않도록 설정 한 작은 VBScript를 작성한 다음 그 다음날 다시 사용하도록 설정합니다.
스크립트는 제한된 권한의 사용자 로그인으로 실행됩니다. 이 사용자는 Windows 레지스트리를 변경할 권한이 없기 때문에 관리자 계정으로 실행해야합니다.
제한된 사용자 로그인 as explained here, point 5에서 관리자 계정의 스크립트를 실행하는 예약 된 작업을 설정했습니다.
다음과 같은 문제가 있습니다. Windows 레지스트리에 변경 사항을 적용한 후에 변경 사항을 적용하려면 해당 사용자의 explorer.exe를 다시 시작해야합니다. 내 스크립트가이 작업을 수행하지 않습니다. explorer.exe를 죽일 수는 있지만 어떤 이유로 다시 시작할 수 없습니다.
관리자 계정에서 스크립트를 직접 실행하여 관리자 계정의 레지스트리 설정을 변경하고 관리자 계정 explorer.exe를 다시 시작하면 스크립트가 완벽하게 작동합니다.
다음은 코드의 일부입니다 :VBScript - 다른 사용자의 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에서 프로세스 (죽일해야

절차 관리자의 하나 그가 그렇게 로그 오프해야한다, 그것은 괜찮아요 하나만 있으면 안되며, 사용자 이름별로 걸러 낼 수 있고 사용자의 계정 만 죽일 수는 있지만 문제는 아닙니다.) 관리자 계정에서 예약 된 작업을 실행하면 아무런 문제가 없습니다. 실제로 사망이 경우 explorer.exe를에

Sub RestartExplorer2() 

WshShell.Run "cmd /c Taskkill /F /IM explorer.exe" 
WScript.Sleep 500 
WshShell.Run "cmd /c Start explorer.exe" 

End Sub 

하지만 어떤 이유로이 다시 시작되지 않습니다 :
RestartExplorer2은 더 좋은 행운이 없습니다.
아무 결과없이 검색했습니다.
도움을 주시면 대단히 감사하겠습니다. 감사합니다.

답변

0

Windows의 RunAs 기능을 사용하여 다른 사용자 계정으로 Explorer.exe 프로세스를 다시 시작할 수 있습니다. 사용해보기 :

Dim objShell, strUsername, strPassword 
strUsername = "username" 
strPassword = "password" 

Set objShell= WScript.CreateObject("WScript.Shell") 
objShell.Run "runas /user:" & strusername & " ""explorer.exe""" 

WScript.Sleep 100 

objShell.Sendkeys strPassword & "~" 
WScript.Quit 
+0

안녕 Nilpo, 도와 주셔서 감사합니다. 불행히도 runas는 내 문제에 대한 해결책이 아니며 이미 결과없이 이러한 방식으로 시도했습니다. – Giovanni