Чтобы избавиться от хлопот, UAC можно отключить, хотя делать этого не рекомендуется из-за необходимости поддерживать высокий уровень безопасности. Другой подход — выполнить регистрацию с использованием встроенной административной учетной записи Vista, но для этого требуется принять определенные меры предосторожности.
Немного успокоившись, я решил попробовать найти другое решение, вместо того, чтобы возвращаться к старой операционной системе. Потратив немало усилий на исследование и подготовку программного кода, я придумал способ обойти проблему: Elevate Script HTML Application (HTA). С помощью этой утилиты можно запустить сценарий VBScript или JScript с административными полномочиями, всего несколько раз щелкнув мышью. Как показано на экране, следует просто перейти к сценарию, нажать кнопку ElevateScript, а затем кнопку Continue во всплывающем окне UAC. Утилита HTA проектировалась для работы с Vista, но совместима и с XP.
Основная часть Elevate Script HTA — подпрограмма ElevateIt, показанная в листинге. Ядро подпрограммы — метод ShellExecute объекта Shell.Application в API-интерфейсе Windows Shell для сценариев. Этот метод позволяет использовать команду runas, которая настраивает оболочку на предоставление пользователю повышенного уровня системных разрешений при выполнении определенных операций. Пользователь уже должен иметь полномочия, необходимые для выполнения этой операции. Runas не назначает новых полномочий, а просто повышает их.
Во фрагменте B листинга показана команда, в которую входит метод ShellExecute. Как видно, при вызове метода необходимо указать несколько параметров. Согласно информации на странице ShellExecute Method в MSDN, синтаксис метода имеет вид:
ShellExecute (sFile [, vArguments]
[, vDirectory] [, vOperation]
[, vShow]
Сначала рассмотрим параметры vOperation и sFile. Параметр vOperation назначает операцию, выполняемую над файлом, указанным параметром sFile. В этом случае параметры — runas и wscript.exe, соответственно. В результате ShellExecute повышает полномочия пользователя, запустившего механизм Windows Script Host (WSH) WScript.
Параметр sFile — обязательный, а vOperation — нет. Если используется параметр vOperation, его необходимо поставить в соответствие команде, поддерживаемой файлом. Как и параметр vOperation, параметры vArguments, vDirectoryd и vShow — необязательные. Параметр vArguments содержит аргументы для операции. В данном случае аргумент один: путь к сценарию, который нужно запустить с административными полномочиями. Этот путь (то есть File1.value) содержится во входной строке HTA, и подпрограмма ElevateIt извлекает его. Чтобы обеспечить совместимость HTA с XP, путь должен быть заключен в двойные кавычки. Поэтому вместо того, чтобы использовать File1.value как параметр vOperation, я добавил необходимые двойные кавычки и сохранил его в переменной ScriptFile, как показано во фрагменте листинга с меткой A. Затем ScriptFile используется как параметр vArguments.
Параметр vDirectory используется, чтобы указать полный путь к каталогу, содержащему файлы, заданные в sFile. Поскольку WScript — на пути Windows, нет необходимости указывать этот каталог, но все же требуется ввести пустую строку ("").
Параметр vShow показывает, как следует первоначально отображать окно, принадлежащее прикладной программе, которая выполняет операцию. Он может принимать одно из следующих значений:
- 0 — открыть со скрытым окном;
- 1 — открыть с нормальным окном;
- 2 — открыть со свернутым окном;
- 3 — открыть с развернутым окном;
- 4 — открыть с окном с предыдущими размерами и положением;
- 5 — открыть с окно с текущими размерами и положением;
- 7 — открыть со свернутым окном, активное окно остается активным;
- 10 — открыть с окном в обычном состоянии, указанным приложением.
Я хотел, чтобы окно открывалось в нормальном состоянии, поэтому использовал значение 1.
Составить исходный текст приложения Elevate Script HTA не составляет труда; оно удобно для записи и выполнения сценариев в Vista и Server 2008, так как смягчает остроту проблем, связанных с UAC. Перед использованием дополнительной настройки HTA не требуется.
Джим Тернер - Cистемный администратор и разработчик приложений в компании Computer Sciences Corporation. jturnervbs@gmail.com