你好,我有一个监控脚本(带有WinForms GUI),一直在后台运行。
不幸的是,当用户尝试手动关闭计算机时,这会引发“此应用程序正在阻止Windows关机”屏幕,令用户感到困扰。
因此,我需要一种可靠的方法,在启动关机时自动关闭脚本。
我尝试订阅SessionEnding和SessionEnded事件,但它没有起作用:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { Exitfunction }
更新:目前情况如下:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-WmiEvent -Class win32_computerShutdownEvent -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
我添加了一个消息框来查看这些事件是否会触发,但可能由动作脚本块执行的代码有问题。没有运气。当我尝试关闭Windows 8.1系统时,没有任何一个事件会触发。当我使用get-job读取它们时,事件中没有错误。所有事件的状态都是“未启动”。
有什么想法吗?