我正在使用 Windows 任务计划程序在用户登录时启动提升的管理员程序。该技术基于这篇文章:
http://www.sevenforums.com/tutorials/11949-elevated-program-shortcut-without-uac-prompt-create.html
注意:提升管理员权限的程序是自动化测试程序,需要以管理员身份运行才能安装程序并运行各种测试。部分测试需要管理员权限和桌面访问权限。
该任务配置为以高于正常优先级运行,如本文所述:
在 Windows Vista、Windows 7 和 Windows Server 2008 上一切运行正常。
在 Windows 8 和 Windows Server 2012 上,测试程序的性能非常糟糕,通常需要 5 到 10 倍的时间才能运行。CPU 使用率和磁盘 I/O 都非常高。Process Hacker (http://processhacker.sourceforge.net/) 显示 I/O 优先级为正常,页面优先级也为正常。
只有在登录期间通过任务调度程序运行测试程序时,才会出现性能不佳的情况。如果我停止测试程序并通过手动运行任务调度程序任务重新启动它,则恢复正常性能。
以下是精简版测试程序的一些数字:
- 从用户登录运行的测试程序:时间 37.6 秒,页面错误 4530,峰值 WS 17.8M
- 手动重启后相同的测试程序:时间 1.1 秒,页面错误 4383,峰值 WS 17.7M
任何帮助,将不胜感激。
答案1
我认为我找到了解决这个问题的方法。看来 Windows 8 和 Windows Server 2012 上的计划任务的行为取决于任务相对于登录顺序的启动时间。
我的测试任务内置了延迟。任务在登录序列的早期启动,暂停 60 秒,然后开始测试运行。尝试了各种延迟,但在所有情况下,Windows 8 和 Windows 2012 上的性能都很糟糕。注意:测试任务是在几乎全新安装的 Windows 中运行的,因此 60 秒足以通过登录序列。
我更改了测试任务以删除内置延迟,而是使用任务计划程序的启动延迟功能。在 Windows 8 和 Windows Server 2012 上,测试任务配置为登录后 60 秒启动。进行此更改后,测试任务正常运行。
我已经在 MSFT 文档中搜索了此行为的解释,但至今一无所获。
非常感谢@charleswj81、@MDMarra 和@Daniel Goldberg。你们的评论帮助我从不同角度看待问题,并最终找到解决方法。