我在Windows Server 2012上运行。我有一个创建多个进程的服务,其中一个是GUI客户端。高级别的过程如下:
winform exe做了两件事: 一个。它在程序启动时将文件写入磁盘(test.log) 湾它等待键盘按“c”将第二个文件写入磁盘(test2.log)
AutoIT脚本做两件事: 一个。它启动了所述的winform exe 湾它休眠5秒钟,然后发送“c”(发送命令)
如果我手动开始运行此链(从步骤2开始) - 一切正常并且正在创建2个文件。我想这是因为我有一个交互式会话(特别是2)所以这里没有脑子。但是,如果我从服务运行它,一切都在会话0中运行(我使用ProcessExplorer验证了这一点),但只写了第一个文件。意思是,winform exe没有读取击键消息。
我读到了会话0隔离,这意味着来自其他会话的用户输入无法与会话0中运行的程序(服务)交互。但是,现在提到的所有进程都在同一会话0中运行。所以我是不知道为什么我的应用程序没有得到键盘笔划?有什么解决方法吗?请注意,可能无法在不同的会话下运行,因为服务器必须在没有用户登录的情况下运行,据我所知,如果没有登录系统,则无法自行启动会话。
感谢任何帮助。 谢谢!
答案 0 :(得分:0)
您的服务可能在本地系统或本地服务帐户下运行(它总是"登录"在某种意义上)。但您可以更改此行为,以允许在任何指定帐户下运行的服务可以访问桌面。
这里有2个选项:
一个。选择"本地系统帐户"单选按钮和检查" Allo& W服务与桌面交互"。 湾选择"此帐户"并输入或"浏览..."您需要的帐户。
如果您在计算机上设置自动登录,则选项(b)可能有意义(在这种情况下,您可以作为管理员运行并同时访问桌面)。
选项(a)仅在您不需要以管理员身份运行时才适用。希望它有所帮助。