[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 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
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
rockdgon,
48291Пробовал приписать %! %2 %3 к ShellExecute - ничего не получилось.
А %* ?

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
А вообщето, через ShellExecute надо запускать не сам скрипт, а cmd.exe c параметрами
/c "%~fs0" %*

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "тут_пишем_параметр", "", "runas", 1) & Close()"

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 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
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
48296Можно передать один параметр, а если их несколько?
Так я же написал, %* передаст все параметры.
mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%*", "", "runas", 1) & Close()"


Последний раз редактировалось: nikzzzz (2017-12-24 17:35), всего редактировалось 1 раз

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
nikzzzz, мин, ща проверю. Я не понял сначала и начал сразу после "%~fs0" ставить.
Не выходит таким образом
mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%*", "", "runas", 1) & Close()"

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
rockdgon,
По идее, должно работать, проблемы могут быть только с кавычками в параметрах.

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
nikzzzz,
Если написать %* то будет выполнен 1 параметр. Если параметров больше 1го, например install.cmd portable pause
то вообще не выполняется

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация: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
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
rockdgon,
Да, действительно работает тлько с одним параметром, попробую разобраться.

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
nikzzzz, попробовал параметры в переменную засунуть
set args=%1 %2 %3 %4 %5
А переменную уже вставить в ShellExecute - не запускает.

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
ShellExecute вообще 2 параметра не хочет выполнять

[Цитировать]

    rockdgon
  • 1013
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 93
  • Репутация:0

    [+] [-]
Ander_73, спасибо, твой вариант заработал! az

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Есть еще вариант, правда не совсем корректный? но работает
set arg=%*
if not "%arg%"=="" set arg=%arg: =,%
mshta "vbscript:CreateObject("Shell.Application").ShellExecute("%~fs0", "%arg%", "", "runas", 1) & Close()"
ag


Последний раз редактировалось: nikzzzz (2017-12-24 19:21), всего редактировалось 1 раз

Страница 1 из 3


Показать сообщения:    

Текущее время: 28-Мар 18:55

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы