【问题标题】:Automating user interaction from within Session 0在 Session 0 中自动化用户交互
【发布时间】:2016-04-25 22:48:42
【问题描述】:

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

  1. 服务运行启动器 exe
  2. 启动器 exe 启动 AutoIT 编译的 exe
  3. AutoIT 编译的 exe 启动一个 winform exe

winform exe 做了两件事: 一种。它在程序启动时将文件写入磁盘(test.log) 湾。它等待键盘按“c”将第二个文件写入磁盘(test2.log)

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

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

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

感谢任何帮助。 谢谢!

【问题讨论】:

    标签: windows winforms session ui-automation


    【解决方案1】:

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

    1. 转到菜单“开始->计算机->管理”。
    2. 在“计算机管理”窗口中选择“服务和应用程序->服务”。
    3. 找到您的服务并通过弹出菜单调用“属性”。
    4. 打开“登录”标签。

    你有两个选择:

    一个。选择“本地系统帐户”单选按钮并选中“允许服务与桌面交互”。 湾。选择“此帐户”并输入或“浏览...”您需要的帐户。

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

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

    【讨论】:

    • 嗨 Vasily,我实际上尝试了这两个选项,但它仍然是在会话 0 中创建的,只是在不同的用户下。还是不行:(
    • 使用选项 (b) 可能您需要设置自动登录。也许我误解了你的消息the server must run without user logged on and as far as I know。是否在服务器上设置了一些策略?如果是,则无法访问任何 GUI。
    • 此处描述了自动登录设置:serverfault.com/questions/269832/…
    • 当然,应用设置后需要重启服务。以防万一。它可能需要将用户帐户添加到管理员组。
    • 经过我的实验,我无法找到一种通过服务与桌面交互的方法。我另一个项目的同事也这么说:这很可能是不可能的。
    猜你喜欢
    • 2022-01-19
    • 2015-09-21
    • 1970-01-01
    • 2020-11-24
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多