我正在运行一个由第三方创建的小型可执行文件,该文件需要在Windows 2008服务器上定期运行。此可执行文件有效地将信息从一个系统传输到另一个系统,并且需要每隔一小时左右全天候运行一次。作为其处理的一部分,可执行文件启动一个小型Windows窗体类型的UI。
我已经设置了一个计划任务来调用该文件,并且只有在配置任务运行的用户登录到计算机时才有效(本地或通过远程桌面)。如果将任务设置为以其他用户身份运行,或将任务设置为在用户未登录时运行,在计划的任务执行和错误。我已经尝试运行作为不同的用户,包括管理员用户和系统用户。是否有任何可能的解决办法(不改变我无法访问的第三方代码),这将允许此代码在没有特定用户登录的情况下运行。
8条答案
按热度按时间kgsdhlau1#
GUI应用程序需要一个桌面,而您只能为登录用户获得其中一个桌面。
kxxlusnw2#
本文展示了如何创建一个不需要任何登录的任务:https://www.scriptjunkie.us/2013/01/running-code-from-a-non-elevated-account-at-any-time/
所述程序如下:
首先,创建一个计划任务,以当前用户的身份使用默认选项运行命令(这将默认创建一个仅在您登录时运行的计划任务):
第一个月
然后将任务导出为XML:
schtasks /query /XML /tn mytask > temp.xml
个并删除任务:
schtasks /delete /tn mytask /f
个然后打开xml文件,将
<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
个2exbekwf3#
从我所做的研究(以及大卫·赫南的回答)来看,在不影响源代码的情况下,这似乎是不可能的。
有一些关于How can I run a Windows GUI application on as a service?的有用的想法与此相关,但没有给予一个可行的解决方案来解决这个问题。
svujldwt4#
我可能会晚些回复,但我们不能使用at命令,没有/交互式.
https://support.microsoft.com/en-us/kb/313565
根据微软:/interactive:使用此参数允许任务与在任务运行时登录的用户的桌面进行交互。
1qczuiv05#
有一个简单的解决方案。将组更改为本地组“users”,您将不会被提示输入密码。(计划任务-常规-安全选项-更改用户或组)。
nxowjjhe6#
我想我已经找到了解决这种情况的办法。你需要在服务器上有两个用户帐户(用户1和用户2). RPD到用户1下的服务器中。在此RPD中,创建计划任务,并将其设置为在用户2帐户下运行。然后,从此RPD中,您需要使用User 2凭据RPD进入服务器本身(有点像《盗梦空间》中的梦中梦)。重要的是不要最小化这个新的RPD窗口;您可以将其缩小,但必须将其打开。然后,您可以自由关闭原始RPD会话,并且任务将在User 2帐户下运行,因为User 2具有来自第二个RPD会话的打开桌面。
Protip -不要在RPD窗口顶部取消固定RPD窗口句柄-关闭正确的RPD可能会很痛苦。如果你这样做,你需要使用开始>注销选项。
kmbjn2e37#
这看起来是一个旧线程,但我最近在我的组织中遇到了这个问题,因为他们没有使用UAC要求。我仍在测试这个问题,但我相信您仍然可以通过在任务上使用
/Change
命令并添加/IT
标志使其具有交互性来在计划任务上启用交互模式。此处引用:https://learn.microsoft.com/en-us/windows/desktop/taskschd/schtasks字符串
我最初的测试表明这是工作,但我不能明显看到一个区别的任务调度器的任务时,我这样做。所以,我不知道如何验证它是否设置为这样做。
jmo0nnb38#
我有一个类似的问题.我的VB应用程序将无法正常运行在我的服务器上,除非我有“运行时,只有用户登录”启用.我忘了我在哪里找到这个信息,但这样做允许我的VB应用程序完美地运行与一个设置的用户,而不需要登录.它允许它与桌面交互.
在Windows 2008(或更高版本)服务器上,您需要执行以下操作:
对于x64,只需创建此文件夹:C:\Windows\SysWOW64\Systemprofile\Desktop
对于x86,只需创建此文件夹:C:\Windows\System32\System\Systemprofile\Desktop