rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
Столкнулся с такой бедой. Собираю в одном командном файле и установку и удаление различного портабла. И бывают случаи когда нужно, чтобы командный файл был запущен от админа, потому как не получается все что нужно в реестр прописать например. Для того чтобы скрипт перезапускался сам от админа использую такую конструкцию:@Echo off ::Элевация прав администратора reg.exe query "HKU\S-1-5-19">nul 2>&1 if %errorlevel% equ 1 goto UACPrompt ::-----------------------------НАЧАЛО СКРИПТА----------------------------------------- chcp 866 <nul echo Y|Reg.exe delete "HKLM\SOFTWARE\Classes\*\shell\Universal Viewer" /f <nul echo Y|Reg.exe delete "HKLM\SOFTWARE\Classes\Directory\shell\Universal Viewer" /f if %1==pause pause EXIT /b ::-----------------------------КОНЕЦ СКРИПТА------------------------------------------ :: Эту строку не трогать. Ниже этой строки ничего дописывать НЕЛЬЗЯ !!! :UACPrompt mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "", "", "runas", 1) & Close()" exit /b Беда в том, что если скрипт нужно выполнить с параметром, например install.cmd uninstall, то параметр не передается скрипту из-за того что тот перезапускается от админа. Пробовал приписать %! %2 %3 к ShellExecute - ничего не получилось. Как это можно решить?
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
rockdgon,48291Пробовал приписать %! %2 %3 к ShellExecute - ничего не получилось. А %* ?
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
А вообщето, через ShellExecute надо запускать не сам скрипт, а cmd.exe c параметрами
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3839
- Репутация:127[+] [-]
|
mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "тут_пишем_параметр", "", "runas", 1) & Close()"
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
При такой записиmshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%1", "", "runas", 1) & Close()" Можно передать один параметр, а если их несколько? Вот такие варианты не работают:mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%1", "%2", "runas", 1) & Close()" mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%1 %2", "", "runas", 1) & Close()"
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
48296Можно передать один параметр, а если их несколько? Так я же написал, %* передаст все параметры.mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%*", "", "runas", 1) & Close()"
Последний раз редактировалось: nikzzzz (2017-12-24 17:35), всего редактировалось 1 раз
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
nikzzzz, мин, ща проверю. Я не понял сначала и начал сразу после "%~fs0" ставить. Не выходит таким образомmshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%*", "", "runas", 1) & Close()"
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
rockdgon, По идее, должно работать, проблемы могут быть только с кавычками в параметрах.
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
nikzzzz, Если написать %* то будет выполнен 1 параметр. Если параметров больше 1го, например install.cmd portable pause то вообще не выполняется
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3839
- Репутация:127[+] [-]
|
@set @x=0; /* if .%1==. cscript.exe //nologo //e:jscript "%~f0"& exit rem Тело бат-ника exit */new ActiveXObject('Shell.Application').ShellExecute (WScript.ScriptFullName,'one two three','','runas',1);
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
rockdgon, Да, действительно работает тлько с одним параметром, попробую разобраться.
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
nikzzzz, попробовал параметры в переменную засунутьА переменную уже вставить в ShellExecute - не запускает.
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
ShellExecute вообще 2 параметра не хочет выполнять
|
rockdgon
- Стаж: 9 лет 5 месяцев
- Сообщений: 93
- Репутация:0[+] [-]
|
Ander_73, спасибо, твой вариант заработал!
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
Есть еще вариант, правда не совсем корректный? но работаетset arg=%* if not "%arg%"=="" set arg=%arg: =,% mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%arg%", "", "runas", 1) & Close()"
Последний раз редактировалось: nikzzzz (2017-12-24 19:21), всего редактировалось 1 раз
|
Страница 1 из 3
Текущее время: 12-Дек 13:21
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|