Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Нужен .vbs скрипт для внесения изменений в реестр

Ответить
Настройки темы
VBS/WSH/JS - Нужен .vbs скрипт для внесения изменений в реестр

Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Помогите написать скрипт .vbs для внесения этих строк в реестр с получением прав на внесение в эту ветку реестра,

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PotPlayerMini.XSPF\DefaultIcon]
@="C:\\Program Files (x86)\\PotPlayer\\PotIcons.dll,86"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PotPlayerMini.MPL\DefaultIcon]
@="C:\\Program Files (x86)\\PotPlayer\\PotIcons.dll,85"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PotPlayerMini.MPLS\DefaultIcon]
@="C:\\Program Files (x86)\\PotPlayer\\PotIcons.dll,81"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PotPlayerMini.M3U8\DefaultIcon]
@="C:\\Program Files (x86)\\PotPlayer\\PotIcons.dll,82"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PotPlayerMini.CUE\DefaultIcon]
@="C:\\Program Files (x86)\\PotPlayer\\PotIcons.dll,84"

а в конце скрипта вставить эти строки для обновления иконок после выполнения скрипта:

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

objWshShell.Run "ie4uinit -show"
' Для Windows 7
objWshShell.Run "ie4uinit -ClearIconCache"

И нужно, что бы скрипт запускался с обычными правами (то есть не нуждался в запуске от Администратора)

Отправлено: 21:40, 21-08-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата BKPB:
И нужно, что бы скрипт запускался с обычными правами (то есть не нуждался в запуске от Администратора) »
Да без проблем. Вот только при попытке что-либо создать/изменить в HKLM интерпретатор Windows Script Host получит «отлуп» от системы.

Отправлено: 21:51, 21-08-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Вот сделал скрипт из рег в vbs с помощью конвертера REG Convert.]

Код: Выделить весь код
Option Explicit
'~ On Error Resume Next
RequireAdmin
 
Dim objReg
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
 
RegWrite "HKLM\SOFTWARE\Classes\PotPlayerMini.XSPF\DefaultIcon", "", "REG_SZ", "C:\Program Files (x86)\PotPlayer\PotIcons.dll,86"
RegWrite "HKLM\SOFTWARE\Classes\PotPlayerMini.MPL\DefaultIcon", "", "REG_SZ", "C:\Program Files (x86)\PotPlayer\PotIcons.dll,85"
RegWrite "HKLM\SOFTWARE\Classes\PotPlayerMini.MPLS\DefaultIcon", "", "REG_SZ", "C:\Program Files (x86)\PotPlayer\PotIcons.dll,81"
RegWrite "HKLM\SOFTWARE\Classes\PotPlayerMini.M3U8\DefaultIcon", "", "REG_SZ", "C:\Program Files (x86)\PotPlayer\PotIcons.dll,82"
RegWrite "HKLM\SOFTWARE\Classes\PotPlayerMini.CUE\DefaultIcon", "", "REG_SZ", "C:\Program Files (x86)\PotPlayer\PotIcons.dll,84"
 
Function RegWrite(reg_keyname, reg_valuename,reg_type,ByVal reg_value)
    Dim aRegKey, Return
    aRegKey = RegSplitKey(reg_keyname)
    If IsArray(aRegKey) = 0 Then
        RegWrite = 0
        Exit Function
    End If
 
    Return = RegWriteKey(aRegKey)
    If Return = 0 Then
        RegWrite = 0
        Exit Function
    End If
 
    Select Case reg_type
        Case "REG_SZ"
            Return = objReg.SetStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
        Case "REG_EXPAND_SZ"
            Return = objReg.SetExpandedStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
        Case "REG_BINARY"
            If IsArray(reg_value) = 0 Then reg_value = Array()
            Return = objReg.SetBinaryValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
 
        Case "REG_DWORD"
            If IsNumeric(reg_value) = 0 Then reg_value = 0
            Return = objReg.SetDWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
 
        Case "REG_MULTI_SZ"
            If IsArray(reg_value) = 0 Then
                If Len(reg_value) = 0 Then
                    reg_value = Array()
                Else
                    reg_value = Array(reg_value)
                End If
            End If
            Return = objReg.SetMultiStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
 
        'Case "REG_QWORD"
            'Return = oReg.SetQWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
        Case Else
            RegWrite = 0
            Exit Function
    End Select
 
    If (Return <> 0) Or (Err.Number <> 0) Then
        RegWrite = 0
        Exit Function
    End If
    RegWrite = 1
End Function
 
Function RegWriteKey(RegKeyName)
    Dim Return
    If IsArray(RegKeyName) = 0 Then
        RegKeyName = RegSplitKey(RegKeyName)
    End If
 
    If (IsArray(RegKeyName) = 0) Or (UBound(RegKeyName) <> 1) Then
        RegWriteKey = 0
        Exit Function
    End If
 
    Return = objReg.CreateKey(RegKeyName(0),RegKeyName(1))
    If (Return <> 0) Or (Err.Number <> 0) Then
        RegWriteKey = 0
        Exit Function
    End If
    RegWriteKey = 1
End Function
 
Function RegDelete(reg_keyname, reg_valuename)
    Dim Return,aRegKey
    aRegKey = RegSplitKey(reg_keyname)
    If IsArray(aRegKey) = 0 Then
        RegDelete = 0
        Exit Function
    End If
 
    Return = objReg.DeleteValue(aRegKey(0),aRegKey(1),reg_valuename)
    If (Return <> 0) And (Err.Number <> 0) Then
        RegDelete = 0
        Exit Function
    End If
    RegDelete = 1
End Function
 
Function RegDeleteKey(reg_keyname)
    Dim Return,aRegKey
    aRegKey = RegSplitKey(reg_keyname)
    If IsArray(aRegKey) = 0 Then
        RegDeleteKey = 0
        Exit Function
    End If
 
    'On Error Resume Next
    Return = RegDeleteSubKey(aRegKey(0),aRegKey(1))
    'On Error Goto 0
    If Return = 0 Then
        RegDeleteKey = 0
        Exit Function
    End If
    RegDeleteKey = 1
End Function
 
Function RegDeleteSubKey(strRegHive, strKeyPath)
    Dim Return,arrSubkeys,strSubkey
    objReg.EnumKey strRegHive, strKeyPath, arrSubkeys
    If IsArray(arrSubkeys) <> 0 Then
        For Each strSubkey In arrSubkeys
            RegDeleteSubKey strRegHive, strKeyPath & "" & strSubkey
        Next
    End If
 
    Return = objReg.DeleteKey(strRegHive, strKeyPath)
    If (Return <> 0) Or (Err.Number <> 0) Then
        RegDeleteSubKey = 0
        Exit Function
    End If
    RegDeleteSubKey = 1
End Function
 
Function RegSplitKey(RegKeyName)
    Dim strHive, strInstr, strLeft
    strInstr=InStr(RegKeyName,"")
    If strInstr = 0 Then Exit Function
    strLeft=left(RegKeyName,strInstr-1)
 
    Select Case strLeft
        Case "HKCR","HKEY_CLASSES_ROOT" strHive = &H80000000
        Case "HKCU","HKEY_CURRENT_USER" strHive = &H80000001
        Case "HKLM","HKEY_LOCAL_MACHINE"    strHive = &H80000002
        Case "HKU","HKEY_USERS"     strHive = &H80000003
        Case "HKCC","HKEY_CURRENT_CONFIG"   strHive = &H80000005
      Case Else Exit Function
    End Select
 
    RegSplitKey = Array(strHive,Mid(RegKeyName,strInstr+1))
End Function
 
Function RequireAdmin()
    Dim reg_valuename, WShell, Cmd, CmdLine, I
 
    GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")_
    .EnumValues &H80000003, "S-1-5-19\Environment",  reg_valuename
    If IsArray(reg_valuename) <> 0 Then
        RequireAdmin = 1
        Exit Function
    End If
 
    Set Cmd = WScript.Arguments
    For I = 0 to Cmd.Count - 1
        If Cmd(I) = "/admin" Then
            Wscript.Echo "To script you must have administrator rights!"
            'RequireAdmin = 0
            'Exit Function
            WScript.Quit
        End If
        CmdLine = CmdLine & Chr(32) & Chr(34) & Cmd(I) & Chr(34)
    Next
    CmdLine = CmdLine & Chr(32) & Chr(34) & "/admin" & Chr(34)
 
    Set WShell= WScript.CreateObject( "WScript.Shell")
    CreateObject("Shell.Application").ShellExecute WShell.ExpandEnvironmentStrings(_
    "%SystemRoot%\System32\WScript.exe"),Chr(34) & WScript.ScriptFullName & Chr(34) & CmdLine, "", "runas"
    WScript.Quit
End Function
Помогите вставить в него эти строки для обновления иконок после выполнения скрипта:

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

objWshShell.Run "ie4uinit -show"
' Для Windows 7
objWshShell.Run "ie4uinit -ClearIconCache"

Последний раз редактировалось BKPB, 21-08-2018 в 23:16.


Отправлено: 22:10, 21-08-2018 | #3


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Один человек подсказал мне вставить эту строку в 13-ю строку этого скрипта:
CreateObject("WScript.Shell").Run "ie4uinit -show"
С Рабочего стола скрипт отрабатывает нормально и при запуске из папки Temp\PotPlayer, куда распаковывает инсталлятор тоже нормально.
Но вот при запуске инсталлятора выскакивает ошибка:
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Users\A47D~1\AppData\Local\Temp\PotPlayer\Associations.vbs
Строка: 13
Символ: 1
Ошибка: Не удается найти указанный файл.
Код: 80070002
Источник: (null)

---------------------------
ОК
---------------------------

Самое интересное, что хоть ошибка и выскакивает иконки обновляются.

Как исправить эту ошибку ?

Отправлено: 09:14, 22-08-2018 | #4


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Кажется что то начинает прояснятся, ошибка зависит от места запуска скрипта вызывающего ie4uinit.exe.
если выбираю директорию для запуска скрипта %SYSTEM32%:
Не удается найти "%SYSTEM32%\Associations.vbs". Проверьте, правильно ли указано имя и повторите попытку.
%WINDIR% - Не удается найти
%SYSTEMDRIVE% - Не удается найти
%ALLUSERSPROFILE% - Не удается найти
%PROGRAMDATA% - Не удается найти
%COMMONPROGRAMFILES% - Не удается найти

Если выбираю директорию %APPDATA% или %LOCALAPPDATA%\, то ошибок нет, но по окончанию почему то открывается окно C:\Users\Администратор

Последний раз редактировалось BKPB, 22-08-2018 в 11:59.


Отправлено: 10:32, 22-08-2018 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Нужен .vbs скрипт для внесения изменений в реестр

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Нужен .vbs скрипт для внесения изменений в hosts BKPB Программирование и базы данных 11 28-06-2017 11:40
CMD/BAT - [решено] Помогите создать BAT файл для внесения записи в реестр BKPB Скриптовые языки администрирования Windows 2 01-03-2017 21:42
VBS/WSH/JS - нужен vbs скрипт для отпраки файлов на mail exekill Скриптовые языки администрирования Windows 0 18-04-2012 16:28
VBS/WSH/JS - Нужен VBS скрипт для поиска файлов по маске и копирование его в определенное место exekill Скриптовые языки администрирования Windows 0 17-03-2012 10:46
CMD/BAT - Нужен батник для внесения данных в системный реестр Nun-Nun Скриптовые языки администрирования Windows 2 26-09-2010 17:35




 
Переход