[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION: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 - ничего не получилось.
Как это можно решить?

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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

[Quote]

    Ander_73
  • 15549
  • Longevity: 2 years 7 months
  • Posts: 1206
  • REPUTATION:80

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

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION: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()"

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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


Last edited by nikzzzz on 2017-12-24 17:35; edited 1 time in total

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION:0

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

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION:0

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

[Quote]

    Ander_73
  • 15549
  • Longevity: 2 years 7 months
  • Posts: 1206
  • REPUTATION:80

    [+] [-]
@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);

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION:0

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

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION:0

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

[Quote]

    rockdgon
  • 1013
  • Longevity: 4 years 3 months
  • Posts: 102
  • REPUTATION:0

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

[Quote]

    nikzzzz
  • 215
  • Longevity: 4 years 7 months
  • Posts: 2787
  • REPUTATION:127

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


Last edited by nikzzzz on 2017-12-24 19:21; edited 1 time in total

Page 1 of 3


Display posts:    

Current time is: 20-Sep 00:23

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum