我想枚举给定进程的子窗口来检查对话框窗口。由于我不会在这里讨论的原因,如果发现任何问题,我想随后终止该应用程序。
运行独立应用程序来执行此操作不会出现任何问题。该应用程序可以访问(通过一些 P/Invoke 调用)进程的窗口,我可以随后终止该应用程序。
但是,将相同的代码作为服务运行并不能按预期工作。运行该服务的用户似乎无法与桌面交互(这是我只能在本地系统帐户中看到的设置)。
有谁知道这个问题有什么解决办法吗?我是否可以从 Windows 服务枚举进程的窗口?
仅供引用 - 我正在使用的代码(至少是其改编版)可在此处找到:https://stackoverflow.com/a/1405088/2115261
最佳答案
您可能运行的是 Windows 7(或 8 或 Vista),因为 Windows 服务与桌面交互的功能最后是在 Windows XP 中支持的。
有一个white paper on MSDN描述了针对 Vista 及更高版本所做的更改。基本上,现在不可能以任何方式与桌面交互。
但是,有an example on CodeProject它演示了如何从 Windows 服务与任务计划程序交互,并且任务计划程序执行的进程可以与桌面交互。也许这对您来说是一个合适的解决方法。
关于c# - 从 Windows 服务枚举打开的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16694989/