检查windows系统是否空闲和运行后台脚本
Checking whether windows system is idle and running background script
这可能是个奇怪的问题。
但是我需要这样做。
实际上,我们正在尝试执行 UItests 作为持续集成目的的一部分。
问题:当 testagent 机器空闲一段时间后,桌面被锁定并且测试开始失败。
我们无法删除防止系统被锁定的安全功能。 IT 违反了我们公司的政策。
我们的解决方案
我们将定期检查系统 (windows 8 / 2008) 是否空闲,例如 3 分钟左右,如果它空闲,那么我们将触发一个 vbs 脚本来执行数字键的点击。
3 分钟后,我们再次检查系统是否空闲并做出决定。
整个objective是为了防止系统被锁定。
您可能想知道这是否也属于安全违规行为。当发生安全问题时,他们会查看是否有任何 windows 功能被禁用,而不是我们是否在后台运行 运行 脚本以保持系统活动。
所以任何人都知道如何通过批处理文件/C# 检查以实现上述场景。
也欢迎任何其他工作建议。
帮助赞赏。
谢谢,
VVP
您可以尝试使用 vbscript 中的 sendkeys 模拟每 3 分钟单击一次 NumLock 的代码:
Option Explicit
If AppPrevInstance() Then
MsgBox "There is an existing proceeding !" & VbCrLF &_
CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"
WScript.Quit
Else
Dim ws : Set ws = CreateObject("WScript.Shell")
Do
ws.SendKeys "{NUMLOCK}"
Pause 3 ' To sleep for 3 minutes
Loop
End If
'********************************************************************************************
Sub Pause(min)
Wscript.Sleep(1000 * 60 * min)
End Sub
'*********************************************************************************************
Function AppPrevInstance()
With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\.\root\cimv2")
With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
" AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")
AppPrevInstance = (.Count > 1)
End With
End With
End Function
'*********************************************************************************************
Function CommandLineLike(ProcessPath)
ProcessPath = Replace(ProcessPath, "\", "\")
CommandLineLike = "'%" & ProcessPath & "%'"
End Function
'*********************************************************************************************
这可能是个奇怪的问题。 但是我需要这样做。
实际上,我们正在尝试执行 UItests 作为持续集成目的的一部分。 问题:当 testagent 机器空闲一段时间后,桌面被锁定并且测试开始失败。 我们无法删除防止系统被锁定的安全功能。 IT 违反了我们公司的政策。
我们的解决方案 我们将定期检查系统 (windows 8 / 2008) 是否空闲,例如 3 分钟左右,如果它空闲,那么我们将触发一个 vbs 脚本来执行数字键的点击。 3 分钟后,我们再次检查系统是否空闲并做出决定。 整个objective是为了防止系统被锁定。
您可能想知道这是否也属于安全违规行为。当发生安全问题时,他们会查看是否有任何 windows 功能被禁用,而不是我们是否在后台运行 运行 脚本以保持系统活动。
所以任何人都知道如何通过批处理文件/C# 检查以实现上述场景。 也欢迎任何其他工作建议。 帮助赞赏。
谢谢, VVP
您可以尝试使用 vbscript 中的 sendkeys 模拟每 3 分钟单击一次 NumLock 的代码:
Option Explicit
If AppPrevInstance() Then
MsgBox "There is an existing proceeding !" & VbCrLF &_
CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"
WScript.Quit
Else
Dim ws : Set ws = CreateObject("WScript.Shell")
Do
ws.SendKeys "{NUMLOCK}"
Pause 3 ' To sleep for 3 minutes
Loop
End If
'********************************************************************************************
Sub Pause(min)
Wscript.Sleep(1000 * 60 * min)
End Sub
'*********************************************************************************************
Function AppPrevInstance()
With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\.\root\cimv2")
With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
" AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")
AppPrevInstance = (.Count > 1)
End With
End With
End Function
'*********************************************************************************************
Function CommandLineLike(ProcessPath)
ProcessPath = Replace(ProcessPath, "\", "\")
CommandLineLike = "'%" & ProcessPath & "%'"
End Function
'*********************************************************************************************