在会话0中自动化用户交互

时间:2016-01-20 07:39:54

标签: windows winforms session ui-automation

我在Windows Server 2012上运行。我有一个创建多个进程的服务,其中一个是GUI客户端。高级别的过程如下:

  1. 服务运行启动器exe
  2. 启动程序exe启动AutoIT编译的exe
  3. AutoIT编译的exe启动winform exe
  4. winform exe做了两件事: 一个。它在程序启动时将文件写入磁盘(test.log) 湾它等待键盘按“c”将第二个文件写入磁盘(test2.log)

    AutoIT脚本做两件事: 一个。它启动了所述的winform exe 湾它休眠5秒钟,然后发送“c”(发送命令)

    如果我手动开始运行此链(从步骤2开始) - 一切正常并且正在创建2个文件。我想这是因为我有一个交互式会话(特别是2)所以这里没有脑子。但是,如果我从服务运行它,一切都在会话0中运行(我使用ProcessExplorer验证了这一点),但只写了第一个文件。意思是,winform exe没有读取击键消息。

    我读到了会话0隔离,这意味着来自其他会话的用户输入无法与会话0中运行的程序(服务)交互。但是,现在提到的所有进程都在同一会话0中运行。所以我是不知道为什么我的应用程序没有得到键盘笔划?有什么解决方法吗?请注意,可能无法在不同的会话下运行,因为服务器必须在没有用户登录的情况下运行,据我所知,如果没有登录系统,则无法自行启动会话。

    感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

您的服务可能在本地系统或本地服务帐户下运行(它总是"登录"在某种意义上)。但您可以更改此行为,以允许在任何指定帐户下运行的服务可以访问桌面。

  1. 转到菜单"开始 - >计算机 - >管理"。
  2. 在"计算机管理"窗口选择"服务和应用程序 - >服务"。
  3. 找到您的服务并致电" Properties"通过弹出菜单。
  4. 打开"登录"标签。
  5. 这里有2个选项:

    一个。选择"本地系统帐户"单选按钮和检查" Allo& W服务与桌面交互"。 湾选择"此帐户"并输入或"浏览..."您需要的帐户。

    如果您在计算机上设置自动登录,则选项(b)可能有意义(在这种情况下,您可以作为管理员运行并同时访问桌面)。

    选项(a)仅在您不需要以管理员身份运行时才适用。希望它有所帮助。

    screenshot