作为安装程序的一部分,我需要从ANT运行批处理文件。如果我以管理员身份运行cmd.exe并运行批处理文件,那么一切都很好,因为它具有相应的管理权限。当从ant执行批处理文件时,它会失败,就像我在没有管理权限的情况下运行批处理文件一样。我的问题是,如何从ANT脚本中以管理模式运行此批处理文件?
<exec executable="cmd.exe" output="dir.txt" dir="c:/bin/">
<arg line="/c service.bat install"/>
</exec>
答案 0 :(得分:3)
至少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更加便利,正如另一个答案所示。
答案 1 :(得分:2)
您可以尝试Script Elevation PowerToy。它添加了一个提升命令,可用于提升命令行上的权限。
答案 2 :(得分:2)
我偶然发现了类似的问题。解决方案是使用PsExec作为可执行文件,并使用它来调用批处理文件。 PsExec是Windows的runas命令的强大替代品。
答案 3 :(得分:1)
关闭UAC似乎是允许执行此ant任务的唯一选项。
我尝试制作批处理文件的快捷方式并运行它,因为快捷方式可以设置为“以管理员身份运行”。我得到提示时没有运气,但我的批处理文件仍然失败。
答案 4 :(得分:-2)
通过使用elevate命令提示符,我们可以执行此操作。
在Ant任务中我们可以使用exec任务来运行任何可执行文件。就像我们也可以使用exec命令提示符
<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中定义的适当位置可用。
here是原帖
的参考链接