解决方法是,Windows中的计划任务需要用户login

我正在运行由第三方创build的小型可执行文件,需要在Windows 2008服务器上定期运行。 这个可执行文件有效地将信息从一个系统传输到另一个系统,并且需要每天24小时运行。 作为其处理的一部分,可执行文件启动一个小的Windows窗体types的用户界面。

我已经设置了一个计划的任务来调用这个文件,只有在任务被configuration为运行的用户login到本地计算机(本地或通过远程桌面)时,这个任务才能工作。 如果我将任务设置为以另一个用户身份运行,或者将任务设置为在用户未logging时运行,则在计划的任务上执行并发生错误。 我尝试以不同的用户身份运行,包括pipe理员用户和系统用户。 是否有任何可能的解决方法(不更改我无法访问的第三方代码),这将允许此代码在没有特定用户login的情况下运行。

GUI应用程序需要一个桌面,你只能得到一个登录用户。

本文介绍如何创建不需要任何登录的任务: https : //www.scriptjunkie.us/2013/01/running-code-from-a-non-elevated-account-at-any-time/

所描述的程序如下:

首先,创建一个计划任务,以当前用户的默认选项运行命令(这将默认创建一个只在您登录时运行的计划任务):

schtasks /create /tn mytask /SC HOURLY /TR "calc"

然后将任务导出为XML:

schtasks /query /XML /tn mytask > temp.xml

并删除任务:

schtasks /delete /tn mytask /f

然后打开xml文件,并用<LogonType>S4U</LogonType>替换<LogonType>InteractiveToken</LogonType> <LogonType>S4U</LogonType>

这可以通过以下命令来完成,假设powershell在系统上: powershell -Command "Get-Content '.\temp.xml' | foreach {$_ -replace 'InteractiveToken', 'S4U' }" > new.xml move /y new.xml temp.xml

现在从修改后的XML文件重新创建任务:

schtasks /create /xml temp.xml /tn mytasks

并删除您的临时文件:

del /f /q temp.xml

我可能会迟到回复,但不能使用命令,没有/交互式…

https://support.microsoft.com/en-us/kb/313565

根据microsoft:/ interactive:使用此参数允许任务与在任务运行时登录的用户的桌面进行交互。

我想我已经找到了解决这个问题的办法。 您需要在服务器上有两个用户帐户(User1和User2)。 RMD到User1下的服务器。 在此RMD中,创建您的计划任务,并将其设置为在User2帐户下运行。 然后,从这个RMD中,你需要使用User2证书(类似于梦中梦之梦)的RMD到服务器本身。 重要的是不要将这个新的RMD窗口最小化。 你可以把它变小,但它必须是开放的。 然后您可以自由关闭原始RMD会话,并且该任务将在User2帐户下运行,因为User2从您的第二个RMD会话中打开了一个桌面。

Protip – 不要取消固定RMD窗口顶部的RMD窗口句柄 – 然后关闭正确的RMD可能会很麻烦。 如果这样做,则需要使用“开始”>“注销”选项从您的RMD中完全删除。

从我所做的研究(和David Heffernan的回答)看来,似乎没有影响源代码,这是不可能的。

有一些有用的想法如何作为服务运行Windows GUI应用程序? 这涉及到这个问题,但没有一个可行的解决方法来解决这个问题。

有一个简单的解决方案。 将组更改为本地组“用户”,不会提示您输入密码。 (计划任务 – 常规 – 安全选项 – 更改用户或组)。