我在 Windows 7 环境中安排了几个进程,主要用于备份,这些进程应该在后台运行。
然而,任务调度程序并没有在后台安静地工作,而是弹出一个黑色的(类似控制台的)“taskeng.exe”窗口。该窗口位于所有其他窗口的前面。幸运的是,它不会窃取我的键盘焦点,但它会遮挡所有东西的视线。
有没有办法避免出现这个窗口——或者至少让它出现在背景中而不会夺走我的视觉焦点?
赏金申请后编辑的示例:
这是我最后一次尝试使用 WScript 内容(在名为 RunSignatured.bat 的文件中):
Set Shell = CreateObject("WScript.Shell")
Shell.Run C:\Users\danh\Bin\signatured.bat, 0, False
signatured.bat 文件包含:
cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature
答案1
更具体地说是 Daniel R Hicks 的赏金/例子,但我认为它仍然可以应用于原始问题:
如果它是从任务计划程序启动的批处理文件,那么您可能还需要修改批处理文件本身以不可见的方式运行其命令,而不仅仅是启动最小化/不可见的批处理文件。
因此改变:
cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature
类似于:
cd C:\Users\danh\bin
start /b "C:\Program Files\Java\jre7\bin\java.exe" Signature
或者可能完全消除批处理文件并只执行直接从任务计划程序启动的(VBS)脚本的所有操作。
就像是:
Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin"
Shell.Run "C:\Program Files\Java\jre7\bin\java.exe Signature", 0, False
解决方案由 DanH 实施,响应 techie007 的建议,满足赏金:
一个名为 RunSignatured.vbs 的文件,包含:
Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin"
Shell.Run "java.exe Signature", 0, False
请注意,上述操作依赖于 java.exe 位于路径中,因为在指定完整路径时,该技术不适用于 Program Files 中的空白。毫无疑问,还有其他方法可以解决这个问题,但这取决于其他人的发现。
然后RunSignature.vbs
在任务计划程序的“操作”中添加“程序/脚本”名称。
答案2
您可以以其他用户的身份运行计划任务,这样它们就根本不会与您的普通帐户的交互式桌面进行交互。这似乎在我管理的 Windows2003 服务器上确实有效。只需小心确保设置了文件权限和其他身份验证详细信息,以便任务在以其他用户身份运行时可以访问它们需要的内容。
编辑:或者,您也可以不直接运行控制台工具,而使用一个小脚本,使用 WScript.Shell.Run 和“最小化,不改变焦点”选项来运行它:
' sample script: c:\scripts\test.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\location\of\tool\utility.exe", 7
然后使用任务调度程序(命令行类似于wscript c:\scripts\test.vbs
)运行此程序,而不是直接调用该工具。您也可以通过这种方式调用批处理文件和其他脚本。还有一个“完全隐藏”选项(将上面的 7 替换为 0),但无论哪种情况,隐藏/最小化都只控制初始窗口:如果该工具自己打开更多窗口,那么它们可能仍会像以前一样窃取焦点。
看http://msdn.microsoft.com/en-us/library/d5fk67ky%28VS.85%29.aspx了解运行方法的完整选项列表。
答案3
尝试像这样运行您的计划任务:
C:\Windows\System32\cmd.exe /c start /bc:\fullpath\mybackup.bat
应该start /b
启动应用程序而不创建新窗口。
如果这不起作用,那么你可以创建一个独立的自动识别隐藏 taskeng.exe 窗口的脚本。AutoIt 脚本可以编译为 .exe。
.exe 将是 mybackup.bat 文件中的第一行。AutoIt 代码如下所示:
WinSetState("taskeng", @SW_HIDE)
答案4
尝试4trayMinimizer。您可以定义默认隐藏的应用程序。