我用 C# 和 WHITE 制作了一个简单的应用程序,单击一个按钮来清除日志。我使用远程桌面连接连接到我的测试机器并执行该应用程序。当我的会话连接时它工作正常,但每当我断开我的会话时,它就会停止工作。
当 Windows 会话断开时,有什么方法可以执行该应用程序?
我用 C# 和 WHITE 制作了一个简单的应用程序,单击一个按钮来清除日志。我使用远程桌面连接连接到我的测试机器并执行该应用程序。当我的会话连接时它工作正常,但每当我断开我的会话时,它就会停止工作。
当 Windows 会话断开时,有什么方法可以执行该应用程序?
您可以编写一个Windows Service。
您还可以使用任务调度程序。您可能不需要 C# 包装器,您可以在调度程序中自己添加所需的条目。
当我的会话连接时它工作正常,但每当我断开我的会话时,它就会停止工作。
这是设计使然。当您断开会话时,它会被锁定。当您的会话被锁定时,UI 自动化将不起作用。
你可以通过从不锁定会话来解决这个问题,可能通过不同的远程桌面工具(VNC/PcAnywhere)。但这绝对是一个黑客。
相反,我建议采用不同的方法。我建议尽可能避免 UI 自动化。我一直发现 UI 自动化是不稳定且不可靠的。
在对您的问题的评论中,您说您的应用程序只是 UI 自动化单击按钮以清除日志。日志由DebugView
应用程序生成。
我建议您改为登录到文件。网站上提到了此功能DebugView
:
http://technet.microsoft.com/en-us/sysinternals/bb896647
您还可以考虑使用远程监控。
如果大小是一个问题,您还可以查看“日志文件包装”和“日志文件翻转”功能。
取自 https://www.ranorex.com/help/latest/ranorex-remote/remote-faq#c13444
在远程机器上创建一个批处理文件并插入以下代码:
for /f "skip=1 tokens=3 usebackq" %%s in (
`query user %username%`
) do (
%windir%\System32\tscon.exe %%s /dest:console
)
将此批处理文件保存在远程计算机的桌面上,并将其命名为:“KeepSessionOpen.bat”。如果您需要断开 RDP 会话,您现在只需使用管理员权限运行此批处理文件,您的远程计算机将保持解锁状态。