是否可以创建一个事件或脚本,在使用网络唤醒启动计算机时启动它?
我不想在计算机正常启动时(自动)启动该程序。
答案1
以下是我创建此类触发器的想法(但我不能保证成功)。由于我没有合适的环境来测试这个想法,因此需要您进行一些实验。
以下命令可用于识别唤醒源:
powercfg -lastwake
对于网络唤醒 (WOL) 来说,报告的唤醒设备将是您的以太网控制器。
一旦您知道发生了这样的事件以及唤醒源的确切名称,这就是我关于如何添加触发脚本的想法:
- 打开事件查看器并找到 WOL 事件(唤醒源是以太网控制器)
- 右键单击该事件并选择“将任务附加到此事件...”
- 选择“启动程序”作为操作
- 添加
Powershell.exe
脚本的路径 - 为了获得更多控制,请在完成步骤中选择“打开属性...”复选框
- 在“触发器”选项卡中,编辑事件触发器以添加更详细的触发
一些有助于入门的参考资料和示例:
答案2
正如 Ramhound 在评论中提到的那样,Windows 无法知道计算机是如何开启的。(WOL、Bios 计时器事件、手动开启等等。)
您从 Windows 中唯一能获得的信息是计算机是在正常重启或关机事件后启动的,还是在意外断电或强制关机后启动的。
此信息可在事件日志中找到。
如果您确信 WOL 事件仅发生在您自己永远不会使用计算机的时间段内,那么您可以采取的最佳措施就是这样做。您可以设置一个计划任务,在该时间段内每 5 分钟左右运行一次,运行脚本来启动应用程序。
必须将任务配置为不唤醒计算机,因此只有计算机被 WOL 唤醒时它才会运行。脚本应该首先检查应用程序是否已在运行(如果是:退出),如果应用程序未在运行,则启动应用程序。
此外:如果 WOL 事件随机发生,您仍然可以使用计划任务方法,前提是您将计算机配置为不使用自动登录。如果您确保在离开计算机进入睡眠状态之前注销,则计算机将在 WOL 事件时从睡眠状态恢复,而无需任何人登录。
您可以在计划任务中对此进行测试,并且仅在无人登录时运行该应用程序。但这有点棘手,因为 Windows 没有提供简单的检查方法。我通常的方法是使用tasklist | findstr explorer
。如果有用户登录,您将为每位用户获得 1 行,因为每个用户都有自己的 explorer.exe 副本在运行。但如果没有人登录,则也不会运行 explorer.exe。
答案3
在 Windows 10 上仍然无法做到这一点?能够区分系统是在 WOL 之后启动还是在开机按钮之后启动将会非常有趣。