无论用户是否登录,如何强制从计划任务集中显示已启动程序的托盘图标以运行?

问题描述 投票:0回答:2

在 Windows 上,设置为无论用户是否登录以及其批处理文件正在启动另一个程序都运行的计划任务将阻止新启动的程序显示其托盘图标。

另一方面,设置为仅在用户登录时运行的同一计划任务将生成程序的托盘图标,但会产生不良效果,即瞬间生成命令提示符窗口,而且这不是所需的情况,因为这个计划任务必须在任何用户登录该计算机之前运行。

那么,有没有一种方法可以强制在从计划任务集调用时显示已启动程序的托盘图标以运行,无论用户是否登录? (即使这意味着必须在批处理文件中指定特定的 Windows 配置文件用户/密码)

这是从计划任务执行的批处理文件,请注意 shell 上缺少托盘图标。底部的运行行:

@if (@CodeSection == @Batch) @then
@echo off & setlocal

set "URL=http://**********HIDDEN**********.php?pull=1";
cscript /nologo /e:jscript "%~f0" "%URL%";

goto :EOF
@end

var x = WSH.CreateObject("Microsoft.XMLHTTP");

x.open("GET",WSH.Arguments(0),false,"********","********");
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState != 4) WSH.Sleep(50);

if (x.status == 200 && x.responseText == '1') {
    var shell = WScript.CreateObject("WScript.Shell");
    shell.Run('"C:\\Program Files\\TightVNC\\tvnserver.exe"');
}
batch-file scheduled-tasks jscript
2个回答
0
投票

好吧,我最终创建了第二个计划任务,该任务仅在用户登录并且该批处理文件启动程序时运行,使其托盘图标可见。它在第一个计划任务后运行 3 秒,如 OP 所示,从服务器提取一个字节,但在底部,它创建一个 cookie 文本文件和第二个计划任务,而不是执行 shell.Run() 3秒后拿起。

因此,当计算机无人值守/从任何 Windows 会话注销时,第一个计划任务将运行服务而不是应用程序(没有图标,但谁在乎),但当用户登录 Windows 会话时,第二个计划任务就会启动第一个计划任务留下的 cookie 文本文件并弹出托盘图标。

工作起来就像一个魅力,但值得注意的是,无论用户是否登录,从计划任务集启动的任何运行都永远不会显示任何任务栏/托盘/通知图标。所有后续程序、进程或从该计划任务冒泡的命令对于用户来说是不可见的,就像在私人会话下运行一样,即使在计划任务中指定了 Windows 帐户用户/密码并且程序以指定的用户帐户运行。这就是计划任务的方式,这是一种限制,IMO,但可以通过上面提到的 hack 来克服。

为了防止任何类型的中断,因为该计划任务每 5 分钟运行一次,我使用了 8KB“CMDH.exe”二进制文件,我将其与部署在计算机上的批处理文件捆绑在一起。 http://www.gate2.net/tools/cmdh/cmdh.html


0
投票

我已经在Windows 10 Pro上以这种方式解决了,我创建了在系统启动时执行的计划,无论连接的用户如何,这样它们就会被执行并且保持不可见。然后我创建了登录到任何用户时执行的相同计划,以这种方式显示图标,不会创建新实例,因为它不在计划中,甚至在任务管理器中签入

© www.soinside.com 2019 - 2024. All rights reserved.