Есть ли способ запустить задачу ANT от имени администратора в Windows Vista?

В рамках установщика мне нужно запустить пакетный файл из ANT. Если я запускаю cmd.exe от имени администратора и запускаю пакетный файл, все в порядке, поскольку он имеет соответствующие административные привилегии. Когда пакетный файл запускается из ant, он терпит неудачу, точно так же, как если бы я запускал пакетный файл без прав администратора. Мой вопрос: как я могу запустить этот пакетный файл в административном режиме из моего сценария ANT?

<exec executable="cmd.exe" output="dir.txt" dir="c:/bin/">
<arg line="/c service.bat install"/>
</exec>

person Edward    schedule 23.04.2009    source источник


Ответы (5)


По крайней мере, в XP есть команда runas, которую вы можете попробовать использовать, например:

runas /u:%COMPUTERNAME%\Administrator "cmd /c service.bat install"

При вызове он запросит пароль на консоли.

ОБНОВЛЕНИЕ: полгода спустя я обновился до Windows 7. Здесь runas нельзя использовать для повышения привилегий, но Aaron Margosis предлагает решение:

// elevate.js -- runs target command line elevated
if (WScript.Arguments.Length >= 1) {
    Application = WScript.Arguments(0);
    Arguments = "";
    for (Index = 1; Index < WScript.Arguments.Length; Index += 1) {
        if (Index > 1) {
            Arguments += " ";
        }
        Arguments += WScript.Arguments(Index);
    }
    new ActiveXObject("Shell.Application").ShellExecute(Application, Arguments, "", "runas");
} else {
    WScript.Echo("Usage:");
    WScript.Echo("elevate Application Arguments");
}

Который, возможно, может быть встроен в установщик, если это необходимо. Тем не менее, для конечных пользователей Script Elevation Power Toys более удобен, как следует из другого ответа.

person Laurynas Biveinis    schedule 23.04.2009
comment
Упс, вопрос был про Висту. Что ж, мой ответ основан только на XP, я не уверен, что он применим к Vista. - person Laurynas Biveinis; 24.04.2009
comment
Только что пробовал на Висте. Не сработало... Спасибо за предложение. Есть еще идеи у кого-нибудь? - person Edward; 24.04.2009
comment
@Edward Попробуйте инструмент командной строки Sysinternals PsExec. technet.microsoft.com/en-us/sysinternals/bb897553.aspx - person Jesse; 22.01.2015

Вы можете попробовать PowerToy повышения уровня скриптов. Он добавляет команду повышения уровня, которую можно использовать для повышения привилегий в командной строке.

person Powerlord    schedule 04.05.2009
comment
К сожалению, как часть установщика, я не могу гарантировать, что эта мощная игрушка будет установлена ​​на машине. Для тех, кто хочет решить эту проблему на своей машине, чтобы немного облегчить жизнь, это отличное предложение. Спасибо. - person Edward; 04.05.2009
comment
Ах, верно. Я не учел этого. На самом деле, Windows имеет тенденцию рассматривать программы с определенными именами как всегда требующие прав администратора (например, setup.exe) ... Интересно, верно ли это для setup.bat. - person Powerlord; 05.05.2009

Я наткнулся на аналогичную проблему. Решение состояло в том, чтобы использовать PsExec в качестве исполняемого файла и использовать его для вызова пакета файл. PsExec — мощная замена Windows-команды runas.

person Vaiden    schedule 05.04.2011

Отключение UAC кажется единственным вариантом, позволяющим выполнить эту задачу муравья.

Я попытался создать ярлык для пакетного файла и запустить его, поскольку ярлыки можно настроить на «запуск от имени администратора». Не повезло и там, когда я получаю подсказку, но мой пакетный файл все еще не работает.

[http://www.mydigitallife.info/2007/02/17/how-to-open-elevated-command-prompt-with-administrator-privacy-in-windows-vista/][1]

person Edward    schedule 04.05.2009

с помощью командной строки повышения уровня мы можем сделать это.

В задаче Ant мы можем использовать задачу exec для запуска любого исполняемого файла. Например, мы также можем использовать командную строку с exec tas.

<property name=”admincmd” value=”./elevate.cmd” />
<property name=”server.location” location=”c:/Apache/tomcat/bin” />

<exec executable=”${admincmd}” failonerror=”false”>
<arg value=”cmd” />
<arg value=”/k” />
<arg value=”${server.location}/service” />
<arg value=”install” />
</exec>

В приведенном выше фрагменте кода исходный код elevate.cmd можно загрузить отсюда.

чтобы правильно запустить этот код, нам нужно поместить два файла elevate.vbs, elevate.cmd в один и тот же каталог, и они должны быть доступны в соответствующем месте, которое определяется в свойстве admincmd.

здесь ссылка на оригинальный пост

person Baji Shaik    schedule 28.06.2014