测试需要管理权限的程序的安装过程

时间:2010-05-13 11:14:45

标签: testing uac

我正在尝试编写自动化测试,以确保我的程序的安装程序正常工作。

可以为所有用户(需要管理员权限)或当前用户(不需要管理员权限)安装该程序。该程序还可以自动进行自我更新,在某些情况下需要管理员权限,在某些情况下则不需要。

我正在寻找一种方法,我可以在UAC对话框上单击“是,允许”进行自动测试,因此我可以在许多不同的操作系统上为所有不同的方案编写测试,这样我就可以放心当我对安装程序进行更改时,我没有破坏任何内容。

显然,安装程序进程本身无法做到这一点。但是,我控制整个机器,并且可以轻松启动具有管理权限的某种守护进程,该程序可以与套接字连接,请求它“请立即点击UAC上的确定”。

4 个答案:

答案 0 :(得分:4)

我实际上在想要回答有关UAC的类似问题时想出了如何做到这一点。您可以这样做:

  1. 编写以SYSTEM身份运行的服务。
  2. 打开登录会话中运行的winlogon.exe实例的进程令牌。
  3. 使用该令牌通过CreateProcessAsUser在Winlogon桌面上启动帮助程序进程。
  4. 此时,您在Winlogon(安全)桌面上的登录会话中有一个作为SYSTEM运行的帮助程序进程。从这里,您可以使用某种IPC机制从自动化测试程序到帮助程序进程进行通信。在帮助程序过程中,您可以通过EnumDesktopWindows查找UAC提示。就我所说的而言;我实际上并没有尝试模拟单击是或否,但我没有看到任何理由不起作用。另外,我只测试了Windows 7 32位;我相信UAC架构与Vista完全相同,但我没有对它进行测试。

    我花了一段时间才弄明白这一切;如果你愿意,我可以提供一些代码。

    编辑:就像后续跟进一样,我添加了代码,使用FindWindow()查找“是”按钮,我能够成功发送一条BM_CLICK消息; UAC提示消失了,允许应用程序运行。

答案 1 :(得分:0)

另一种解决方案可能是turn UAC off

答案 2 :(得分:0)

到目前为止,我发现的最不好的解决方案是在VMWare会话中运行测试,并通过vmware sdk控制鼠标/键盘。很想听听其他解决方案

答案 3 :(得分:0)

远程桌面或将其作为来宾VM运行(使用Virtual PC或其他任何东西,只是不要启动它。)这也是获取UAC提示的屏幕截图或视频的最佳方式。