首页 > 解决方案 > 如何在 Go 中查询 Windows 计划任务信息?

问题描述

计划任务具有启动触发器。此任务运行一个 PowerShell 脚本,该脚本立即运行 Go 程序的可执行文件。

Go 程序需要知道它是否正在运行,因为在启动时触发了计划任务,以便它可以采取一些行动doThingAfterBootTrigger()。如果计划任务是由于其他原因(不是因为启动触发器)而触发的,则doThingAfterBootTrigger()不应发生。

除了启动 Go 程序之外,PowerShell 脚本应该什么都不做。判断是否doThingAfterBootTrigger()发生的逻辑需要在 Go 程序中。

如果 Go 程序需要来自 PowerShell 脚本的信息来确定这是否是“启动后触发”情况,那么 PowerShell 脚本可以将该数据传递给 Go 程序。例如,如果 Go 的os.Getppid()函数不存在,那么 Go 程序可以接受 PID 作为参数,PowerShell 脚本将其 PID 作为参数传递给 Go 程序。

潜在的解决方案:

  1. Go 程序依赖于 PowerShell,执行 PowerShell 的Get-ScheduledTaskInfo命令。
  2. 使用 Cgo,使用mstask.hC++ 标头。

这应该完全在本机代码中完成,因此解决方案 1 不是首选。我缺少一个简单的解决方案吗?

标签: powershellgotaskschedulercgowindows-task-scheduler

解决方案


推荐阅读