子 x86Win32ScriptingElevate()
在 WinXP 和 Win7 - 它工作正常:
Call x86Win32ScriptingElevate()
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\test", 1, "REG_DWORD"
WScript.Quit
'*** v13.3 *** www.dieseyer.de *****************************
Sub x86Win32ScriptingElevate()
'***********************************************************
' http://dieseyer.de/scr/elevate.vbs
' Unter Windows x64 laufen VBS' nach einem Doppelklick in der x64-Umgebung
' mit %WinDi%\System32\wscript.exe oder mit %WinDi%\System32\cscript.exe.
' In der x64-Umgebung laufen VBS aber nicht (richtig). Die Prozedur
' x86Win32ScriptingElevate() erkennt dies und startet ggf. das VBS in der
' x86-Umgebung mit
' %WinDirr%\SysWOW64\wscript.exe bzw. mit
' %WinDirr%\SysWOW64\cscript.exe
Dim VBSExe, Tst, TxtArg, i
' MsgBox WScript.FullName & vbCRLF & vbFalse & "..." & False & vbCRLF & wscript.arguments.named.exists("elevated"), , "173 :: "
If wscript.arguments.named.exists("elevated") = True then Exit Sub
' Argumentte sammeln
Dim Args : Set Args = Wscript.Arguments
For i = 0 to Args.Count - 1 ' hole alle Argumente
TxtArg = TxtArg & " " & Args( i )
Next
TxtArg = Trim( TxtArg )
' MsgBox ">" & TxtArg & "<", , "184 :: "
VBSExe = UCase( WScript.FullName )
' x86- / Win32-Systeme haben KEIN %WinDir%\SysWOW64\ - Verzeichnis
Tst = Replace( VBSExe, "\SYSTEM32\", "\SYSWOW64\" )
If CreateObject("Scripting.FileSystemObject").FileExists( Tst ) Then VBSExe = Tst
' VBS mit /elevate starten - ggf. auf x64-System in Win32-Umgebung
' Msgbox """" & VBSExe & """ """ & WScript.ScriptFullName & """ " & TxtArg , , "196 :: "
Tst = createobject("Shell.Application").ShellExecute( """" & VBSExe & """", """" & wscript.scriptfullname & """ " & TxtArg & " /elevated", "", "runas", 1 )
WScript.Quit( Tst )
End Sub ' x86Win32ScriptingElevate()