当没有人login时启动计算机启动程序,并在有人login时显示窗口(操作系统:Windows)

我有一个使用Windows Server 2012上的任务计划程序在系统启动时启动的程序即使计算机自动重启,程序也必须启动。

pipe理员是用于启动该程序的帐户,选项“运行是否用户已login”为任务进行检查。

这个问题是,当有人最终使用远程桌面连接以pipe理员身份login时,界面(程序窗口)被隐藏。

据我所知,有没有办法解决这个使用任务计划。

我该如何解决这个问题?

这应该是一个相当普遍的问题,但我找不到任何searchnetworking。 我很惊讶微软在调度程序中允许有这样的限制。 我可以创build一个VBScript或启动时运行的东西,并启动程序,当用户真正login时,这些程序将会显示出来吗?

其他想法?

(我不想一个独立的GUI程序连接到原来的程序,我也更喜欢它,如果我不必在用户login时终止已经运行的程序,然后启动它再次。)

想出了如何自己做。 这是一种解决方法,但这是我所期望的。

停止! 不要拘束。 继续阅读…

  • 运行它,将其设置为pipe理员应该自动login。

  • 在任务计划程序中创build一个任务。 将其设置为仅在用户(pipe理员)login时运行。 触发器是“在login”,并指定它只有当pipe理员login。

  • 创build第二个任务。 仅在用户login时运行,在pipe理login时触发。 操作应该是“启动程序”,程序是“C:\ Windows \ System32 \ rundll32.exe”,参数字段设置为“user32.dll,LockWorkStation”。

如果您重新启动计算机,现在会发生什么情况是pipe理员自动login,要启动的程序已启动并且工作站已被locking。 如果我通过远程桌面连接login,我可以看到程序窗口并使用GUI。 我可以locking/解锁电脑没有问题,断开/重新连接,我喜欢。 如果我去服务器并在实际的工作站上login也没有问题。 由于pipe理员已经login,任务将不会再次运行(它不会创build一些无法login的无限制loginlocking循环)。

就那么简单。 当然,在自动login之后,计算机被locking的时间还有一秒,我估计在这个时间窗口内,一个能够访问计算机的黑客可以偷偷摸摸地做一些事情,但是在我的情况下,我可以忽略这种安全风险。 只要我不让任何职业黑客进入我家,向他们展示电脑系统应该是相对安全的。 最重要的是在电脑上没有太多价值需要超级保护,所以我对这个解决scheme非常满意。

我有一个使用Windows Server 2012上的任务计划程序在系统启动时启动的程序。即使计算机自动重启,程序也必须启动。

那么为什么你不把它作为一个系统服务,因为Windows的规格定义?

我该如何解决这个问题?

你不能。 后台程序不应该与UI交互。 或者:用户界面应该运行自己的程序,然后连接到服务。 在login用户的用户空间运行的用户界面执行演示,Windows服务进行处理。 这就是15年左右的模式devise。

我很惊讶微软在调度程序中允许有这样的限制。

我更惊讶,你从来没有问过为什么。

有多个问题:

  • 当多人login时,谁获得了用户界面?
  • 当用户注销时,你杀了程序? 哎哟。
  • 安全。 后台程序可能在有限的权限下运行 – 将用户界面展现给用户意味着用户可以在那里执行代码。 Windows消息传递模式是 – 啊 – 充满了问题。

顺便说一下,我不想制作一个单独的GUI程序来连接到原来的程序。

在这一点上,我和微软都不在乎你喜欢做什么。 有一个build立和支持的模型,将后台处理绑定到login的用户界面 – 使用或不使用。 但是,如果没有,不要夸大你所提出的安全问题。

这是关于你的程序运行的Session 。如果没有人login,没有交互式会话显示在下,我相信它运行在Session 0 ,其中有一个奇怪的用户界面,不会像其他显示。

现在,如果你的程序检测到explorer.exe启动的时候(或者其他一些检测用户login的方法),神奇地重新定位了自己,或者在新的sessionid上产生了一些subprocess,那么任何login的人都会很高兴地看到你在做什么。