1

わかりました、もう一度この質問をしてみます。私はこのコードを使用しました:

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\test", 1, "REG_DWORD"

「レジストリ キーのルートが無効です」というエラーが表示されます コード: 80070005 (アクセスが拒否されました) コードは他のレジストリ ルートで動作します。管理者としてログオンしています。昇格したコマンドプロンプトから実行すると機能します。しかし、私は友人に私が何をしているのかわからないようにするいたずらとしてこの VBS を作成しています。何か案は?

4

2 に答える 2

1

サブ 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()
于 2014-06-21T06:06:21.043 に答える
1

レジストリ設定を配布する最善の方法は、レジストリ エディタを使用して、この設定がアクティブなレジストリの一部を .reg ファイルにエクスポートすることです。エクスポート ダイアログの保存部分で、フォーマットとして Win9x/NT4 を選択します。エディターで .reg ファイルを確認できます。ユーザーは、.reg ファイルをダブルクリックしてプロンプトを確認し、場合によっては PC を再起動するだけです。通常のユーザーでもこれを実行できるはずです。変更しようとしているレジストリブランチがセキュリティで保護されている場合は、管理者権限でこれを行う必要があり、場合によっては (OS のバージョンに応じて) regedt32.exe 実行可能ファイルで regedit を開始し、最初にそのブランチのセキュリティを適応させて、かわった。

スクリプトでこれを行うということは、これが悪意のあるスクリプトではないことを確認するために、追加のセキュリティ レイヤーを渡す必要があることを意味します。

于 2012-10-05T11:59:31.240 に答える