为了自动执行笔记本电脑上的简单任务,我使用编译为 .exe 的 AutoHotkey 脚本,该脚本会在我登录时自动启动,并始终以管理员权限在后台运行。我一直在寻找一种在 Autostart 中自动以管理员权限运行程序的方法,但 Windows 10 的集成任务计划程序工作得不太可靠。许多替代解决方案至少会短暂地创建控制台的外观,这对我这个完美主义者来说非常烦人。经过一段时间,我终于找到了一种在后台完全不可见的可靠方法:在我的 App-Data Autostart 文件夹中有一个执行以下 VBScript 的快捷方式:
Dim WShell
Set WShell = CreateObject("WScript.Shell")
WShell.run "cmd.exe /c C:\WINDOWS\system32\schtasks.exe /run /tn ""Test""", 0
Set WShell = Nothing
它无形中调用任务计划程序中的任务“测试”,最终以管理权限执行 AutoHotkey 脚本。
这种方法效果很好,而且绝对可靠,唯一的问题是:一旦激活 Windows 的节能模式,任务栏托盘中运行的程序就会立即终止。这非常烦人,尽管我已经尝试了很多周,但我还没有找到解决这个问题的方法。
我的第一个假设是,当 Windows 处于节能模式时,它会认为该脚本是不必要的,因此会终止它。但我找不到任何设置例外的方法:在正常设置中,它不会作为应用程序出现,因此缺少将其排除在节能措施之外的选项。以高优先级运行脚本也无济于事,并且任务管理器的“详细信息”下的“电源限制”列中此进程的“电源限制”列显示该进程的任何节能措施都已被禁用。
因此,我研究了自动启动过程,发现当我直接运行脚本或手动启动任务计划程序任务时不会出现问题。只有当我使用 VBScript 启动任务时才会出现问题,即使脚本在任务管理器中以相同的优先级出现在最终结果中,并且我看不出实例之间有任何其他区别。
我想在这里问一下是否有人知道是什么导致了 Windows 的这种行为。我将非常感激一个解决方案,该解决方案可以让我为 Windows 的节能措施定义一个例外,修改 VBScript 以使错误不再发生,或者以其他方式解决问题。
编辑:值得注意的是,该问题仅当 Windows 10 根据设置的电池限制自动切换到睡眠模式时才会发生;如果您手动激活睡眠模式,它将不会终止脚本。
答案1
它关闭的原因是 Windows 在省电模式下自动阻止该应用程序作为后台进程运行。
为了防止这种情况,请按照以下步骤操作:
1)进入“设置”。然后选择“系统”。之后,选择“电池”
2) 在顶部的电池寿命估算下,您将看到一个名为“应用程序的电池使用情况”的选项。选择它。
3) 这将为您提供应用程序及其对电池的影响列表。检查并查看是否测试在此列表中。
4)如果存在,请选择测试并取消选中“让 Windows 决定此应用程序何时可以在后台运行”的选项(我使用法语操作系统,因此确切的文本可能有所不同。)
5)然后在下面选择“授权此应用在后台运行”的选项。
测试现在应该能够不受限制地运行,即使在省电模式下也是如此。切换到省电模式时,上述消息将不再显示。
*请注意,这仅适用于 Windows 10 版本 1607 及更高版本。如果您使用的是早期版本,我强烈建议您更新 Windows。
答案2
替代想法:通过将 .bat 和自定义 autohotkeything.exe 放在 system32 文件夹中,它们将始终以管理员身份启动。
使用以下代码创建批处理文件:
启动器
timeout 10
cd "C:\Windows\System32"
start autohotkeything.exe
现在将 launcher.bat 的快捷方式创建到桌面。右键单击它并选择以下选项。
按 [win][r] 打开运行命令。在这里输入“shell:startup”。从桌面剪切快捷方式到此文件夹。
现在,该批处理文件应该会以管理员身份自动启动,超时时间为 10 秒。之后,每次启动时,它都会以管理员身份启动您的自定义 .exe。