Показать полную графическую версию : [решено] Требуется доработать скрипт, чтобы при его запуске появлялся запрос на повышение прав
Здравствуйте, господа программеры!
Задача: есть файл скрипта, находящийся в папке Windows\System32, который выполняется (должен выполняться в Windows 7/Vista). При отключенном UAC все нормально, при включенном - не работает.
Условие: выполнить скрипт без отключения UAC (с появлением запроса на повышение прав) и использования других программ.
Set oWSH = CreateObject("Wscript.Shell")
Args = ""
Last = Wscript.Arguments.Count - 1
For i = 0 To Last
Args = Args & " " & Wscript.Arguments.Item(i)
Next
Args = Replace(Args,"\","")
RetVal = oWSH.Run("manage-bde.exe" & Args,0,True)
Wscript.Quit RetVal
Смотрел: http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html
и
http://forum.script-coding.info/viewtopic.php?pid=32735
Надеюсь на вашу помощь.
Файл скрипта называется manage-bde.vbs
может через предварительно настроенное задание планировщика запускать?..
поробно: Create Administrator Mode Shortcuts Without UAC Prompts in Windows 7 or Vista (http://www.howtogeek.com/howto/windows-vista/create-administrator-mode-shortcuts-without-uac-prompts-in-windows-vista/)
Нет, скрипт выполняет функции сбора дополнительной информации (аргумента) для команды, выполняемой из командной строки, а запуск осуществляется из реестра с дополнительными ключами.
Это не отдельная задача, поэтому планировщик не пойдет.
Кстати, есть русскоязычный вариант статьи у нас: Упрощаем запуск приложений в Windows 7 от имени администратора без отключения UAC (http://www.oszone.net/10594/run_as_admin)
deepred, нужен просто запрос на повышение прав. Никаких имен пользователя и паролей в скрипте быть не должно.
deepred, спасибо, но...
Может я неполно оговорил условия. Скрипт запускается из реестра по команде
wscript.exe manage-bde.vbs -lock -forcedismount %1
Файл manage-bde.vbs находится в Windows\Sysytem32
В настоящий момент вот такая ошибка
http://tools.oszone.net/okshef/TechImg/ManageBDE/manage-bde-1.jpg
Ярлык никакой не нужен, вернее, может его временно в профиль пользователя помещать?
Заменил strDstPath = "Путь к manage-bde.exe" на strDstPath = "%windir%\system32"
okshef,
ёлки-палки..., ты просто партизан!
По поводу "%windir%\system32", как насчет ExpandEnvironmentString? Но это так, лирика...
Про реестр надо было сказать сразу, если у тебя эта софтина прописана в реестре (кстати, в каком
разделе - не Run kb и в каком корне?) и судя по твоему скрину содержится в Path то, "%windir%\system32"
вообще не нужен (тем более, что "спецальные папки" надо изначально "развернуть").
А ярлык заменится автоматически при новом запуске скрипта, хотя добавь три строчки и его можно
удалять по окончанию сеанса WSH
HKEY_CLASSES_ROOT\drive\shell....
как насчет ExpandEnvironmentString? »
А вот таких вопросов задавать не нужно... :)
ёлки-палки..., ты просто партизан! »
а запуск осуществляется из реестра с дополнительными ключами. »
так что я говорил
deepred, может будет понятнее, если я дам ссылку на тему, для чего это все: http://social.technet.microsoft.com/Forums/en-US/w7itprosecurity/thread/41607938-7452-440d-8253-67fe8657bc0f
пост Les Ferch
При отключенном UAC работает превосходно. Нужно, не пользуясь дополнительными программами, запустить скрипт с запросом на повышение прав.
okshef,
В общем понятно, т.е. у тебя выскочил bug с учетками?
Ладно, тема знакомая, все, что было написано мною ранее остается в силе, но есть одно уточнее... При включенном UAC у тебя что происходит - вообще
ничего или выходит запрет? Тебе надо просто отладить этот скрипт, косяк там кроется в том, что при активном UAC запуск manage-bde может
производиться только от имени учетной записи локального администратора (по идее должен существовать какой-нибудь манифест, в котором
это прописано).
Попробуй просто исключить путь к файлу, если у тебя автоматом он вносится в wshshortcut. Bitlocker штука скользкая, по той ссылке которую ты скинул
есть пост, он в самом конце - я бы его попробовал применить, хотя рассматриваемый вариант должен работать...
deepred, у меня при включенном UAC не происходит ничего (при исходном скрипте), т.е. скрипт просто не запускается. Есть вариант использовать программу Elevate (http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/) - но это не красиво: окно командной строки, и пр. и пр.
Как мне казалось поначалу в
Method 1
This re-launches the current VBScript as administrator (elevated) if the script has no command-line arguments passed. When re-launching the script as administrator, simply pass a bogus argument so that the script does not run in a cyclic loop.
If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
'Pass a bogus argument with leading blank space, say [ uac]
objShell.ShellExecute "wscript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else
'Add your code here
End If
Method 2
This method uses a stub or wrapper script which runs the main VBScript elevated using the runas verb.
Set objShell = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
strPath = FSO.GetParentFolderName (WScript.ScriptFullName)
If FSO.FileExists(strPath & "\MAIN.VBS") Then
objShell.ShellExecute "wscript.exe", _
Chr(34) & strPath & "\MAIN.VBS" & Chr(34), "", "runas", 1
Else
MsgBox "Script file MAIN.VBS not found"
End If
есть рациональное звено, но как связать - не знаю, ибо, полный ноль.
okshef,
Скрипты стандартные и рабочие, но первый еще больше усложнит запуск твоего кода с параметрами, а второй будет просто лишним переходом. При все этом конструкцию execute ты можешь использовать и в своем сценарии:
т.е :
вместо твоего oWSH.Run("manage-bde.exe" & Args,0,True)
objShell.ShellExecute "wscript.exe", Chr(34) & _
"manage-bde.exe" & Chr(34) & " Args", "", "runas", 1
но не забудь, что это "Shell.Application", а не "Wscript.Shell""
shellExecute(<File>,<Arguments>,<Directory>,<Operation>,<Show>)
Параметры:
<File> - строка. Имя файла.
<Arguments> - строка (необязательный). Параметры для <Operation>.
<Directory> - строка (необязательный). Путь к каталогу с указанным файлом. Если не указан, используется текущий каталог.
<Operation> - строка (необязательный). Действие ("глагол"), которое необходимо выполнить. Если не указан, используется действие по умолчанию.
<Show> - число (необязательный)
deepred, я никогда не писал скрипты и не понимаю в них ничего. Мне нужен готовый, который можно было бы использовать.
В общем понятно, т.е. у тебя выскочил bug с учетками? »
Никакого бага с учетками там нет. Для выполнения данного VBS нужны полные права администратора, а если их нет, скрипт не отработает просто. Когда скрипт выполняется при включенном UAC, он запускается с обычными правами. Вот и все.
Будьте проще, сделайте готовый скрипт :)
Vadikan,
Никакого бага с учетками там нет»
про баг с учетками читаем по той ссылке, что дал okshef.
Для выполнения данного VBS нужны полные права администратора, а если их нет, скрипт не отработает просто »
Некоректно замечание: для выполнения скрипта достаточно прав учетной записи, а вот для запуска "manage-bde" уже нужны права администратора (UAC active), но при всем при этот скрипт будет отработан полностью, независмо от того - был ли запущен exe или нет...
Args = ""
For i = 0 To Wscript.Arguments.Count - 1
Args = Args & " " & Wscript.Arguments.Item(i)
Next
Args = Replace(Args,"\","")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute "manage-bde.exe", Args, "C:\Windows\System32", "runas", 0
Wscript.Echo "Сценарий выполнен"
Wscript.Quit 0
Доп. информация:
Приведенный сценарий работает на Win7 Ultimate и Home Premium, но при проверке не сработал на WinVista Home Premium и Business, хотя это может быть частный случай.
deepred, СПАСИБО! Отчитываюсь: Windows 7 x 32 Максимальная, сработал чудно. Убрал Wscript.Echo "Сценарий выполнен"
О практическом применении читайте в ближайшее время на сайте.
Блокировка диска, зашифрованного с помощью битлокер, из контекстного меню (http://www.oszone.net/12951/re-lock_a_drive_with_bitlocker)
deepred, не вижу бага...
Некоректно замечание: для выполнения скрипта достаточно прав учетной записи, а вот для запуска "manage-bde" уже нужны права администратора »
Ну так я и сказал Для выполнения данного VBS нужны полные права администратора »
Спасибо за скрипт :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.