创建并立即运行一次Windows任务(作为管理员)

时间:2013-06-26 09:28:16

标签: windows scheduled-tasks uac

我正在为持续集成服务器设置测试节点。它应执行应用程序的GUI测试。因此,它会获取生成的安装程序包,并在运行其他交互式测试之前以静默方式安装应用程序。但是有一个问题:UAC。

由于我们不想禁用UAC来维护真实的测试环境,因此需要绕过一次来设置应用程序。有很多方法可以做到这一点,一个流行的方法似乎使用Windows任务调度程序。任务可以作为普通用户添加,并配置为以管理员身份运行,无需进一步确认。我可以使用schtasks /create命令,但其参数不清楚。此外,/?帮助中的参数值似乎在我的系统上被翻译成德语,我相信(并希望)这是一个错误,值实际上应该用英语指定。

另外,我只想创建任务以立即执行,然后删除它并继续我的其他活动(全部在批处理文件中)。为什么schtasks会这样看?我会从这样的事情开始,但它不完整:

schtasks /create /tn "Testaufgabe" /tr "setup.exe" /sc EINMAL /it /np /z /rl /f

PS:哦,我需要等到启动的应用程序完成,直到我可以继续执行其他任务。所以程序调用必须是同步的,而不是在后台。我已经在网上搜索了几个小时,但似乎无法找到实现这一目标的方法。 UAC似乎无法用于此场景。但是我们在测试用例中需要它,因为这是用户将拥有的。

更新:您无法使用任务计划程序API注册将以最高权限运行的任务。只有在创建任务时具有管理员权限才能实现,这在我的情况下无用。所以我认为我需要专门使用schtasks.exe。

1 个答案:

答案 0 :(得分:2)

它不起作用。我刚刚想出了如何从命令行从XML定义文件创建任务。如果任务想要使用管理员权限执行并将其注册为无效管理员,则会失败。因此,schtasks无法绕过UAC确认 - 只有Task Scheduler GUI。事实上,这个窗口的过程mmc.exe已经以管理员身份启动(没有UAC确认),因此显然可以在那里创建这样的管理任务。

我放弃绕过UAC确认。相反,我只是在不同的本地管理员帐户下启动安装程序可执行文件,我知道密码(可能是psexec)。它不会有测试用户的配置文件和环境,可能会做一些不同的细节,但毕竟这是一种应该工作的方式。