Доступ запрещен
Цитата: Удаленный пользователь от 17.06.2022, 20:09Всем привет! Сделал скрипт, который в один клик добавляет три ключа в реестр, и, с помощью .exe-шника от NotepadReplacer, перенаправляет все запросы со стандартного блокнота на Sublime Text. При повторном клике на скрипт, он удаляет эти три ключа и при запуске блокнота снова запускается стоковый.
Проблема в том, что при попытке удалить [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\']эту ветку[/simple_tooltip], он выдает ошибку доступа. Однако, при удалении [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\\Notepad Replacer\']этой же ветки[/simple_tooltip], уровнем ниже, все удаляется. При этом вручную [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\']эта ветка[/simple_tooltip] удаляется. Можно каким-то образом удалить заблокированную ветку с помощью скрипта?
[spoiler title="сам скрипт"]Const HKLM = &H80000002 strComputer = "." Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") set fso = CreateObject("Scripting.FileSystemObject") set co = CreateObject("WScript.Shell") Set key = CreateObject("WScript.Shell") exe = "sublime_text.exe" scrptdr = Wscript.ScriptFullName scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"") strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" strName = "Debugger" objRegistry.GetStringValue HKLM,strKeyPath,strName,strValue if IsNull(strValue) then key.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\Debugger", scriptdir & "NotepadReplacer.exe" key.RegWrite "HKLM\SOFTWARE\Binary Fortress Software\Notepad Replacer\Target", scriptdir & exe key.RegWrite "HKLM\SOFTWARE\WOW6432Node\Binary Fortress Software\Notepad Replacer\Target", scriptdir & exe fso.MoveFile scrptdr, CurrentDirectory & "Notepad replaced.vbs" Wscript.Echo "Notepad replaced" else key.RegDelete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\Debugger" key.RegDelete "HKLM\SOFTWARE\Binary Fortress Software\Notepad Replacer\" key.RegDelete "HKLM\SOFTWARE\WOW6432Node\Binary Fortress Software\Notepad Replacer\" fso.MoveFile scrptdr, CurrentDirectory & "Notepad is standard.vbs" Wscript.Echo "Notepad ia standard" end if
[/spoiler]
Всем привет! Сделал скрипт, который в один клик добавляет три ключа в реестр, и, с помощью .exe-шника от NotepadReplacer, перенаправляет все запросы со стандартного блокнота на Sublime Text. При повторном клике на скрипт, он удаляет эти три ключа и при запуске блокнота снова запускается стоковый.
Проблема в том, что при попытке удалить [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\']эту ветку[/simple_tooltip], он выдает ошибку доступа. Однако, при удалении [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\\Notepad Replacer\']этой же ветки[/simple_tooltip], уровнем ниже, все удаляется. При этом вручную [simple_tooltip content='HKLM\\SOFTWARE\\Binary Fortress Software\']эта ветка[/simple_tooltip] удаляется. Можно каким-то образом удалить заблокированную ветку с помощью скрипта?
Const HKLM = &H80000002
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
set fso = CreateObject("Scripting.FileSystemObject")
set co = CreateObject("WScript.Shell")
Set key = CreateObject("WScript.Shell")
exe = "sublime_text.exe"
scrptdr = Wscript.ScriptFullName
scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
strName = "Debugger"
objRegistry.GetStringValue HKLM,strKeyPath,strName,strValue
if IsNull(strValue) then
key.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\Debugger", scriptdir & "NotepadReplacer.exe"
key.RegWrite "HKLM\SOFTWARE\Binary Fortress Software\Notepad Replacer\Target", scriptdir & exe
key.RegWrite "HKLM\SOFTWARE\WOW6432Node\Binary Fortress Software\Notepad Replacer\Target", scriptdir & exe
fso.MoveFile scrptdr, CurrentDirectory & "Notepad replaced.vbs"
Wscript.Echo "Notepad replaced"
else
key.RegDelete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\Debugger"
key.RegDelete "HKLM\SOFTWARE\Binary Fortress Software\Notepad Replacer\"
key.RegDelete "HKLM\SOFTWARE\WOW6432Node\Binary Fortress Software\Notepad Replacer\"
fso.MoveFile scrptdr, CurrentDirectory & "Notepad is standard.vbs"
Wscript.Echo "Notepad ia standard"
end if
Цитата: Удаленный пользователь от 18.06.2022, 01:17Добрый🖐.
Если ветка не пуста, то он не удалит командойRegDelete, тут нужен рекурсивный метод удаления.
Тебе нужно это, примеры там есть.
Добрый🖐.
Если ветка не пуста, то он не удалит командой СкопированоRegDelete, тут нужен рекурсивный метод удаления.
Тебе нужно это, примеры там есть.
Цитата: Удаленный пользователь от 18.06.2022, 08:34Михаил, Вы уже столько раз Меня выручали. Спасибо большое!
Михаил, Вы уже столько раз Меня выручали. Спасибо большое!