【发布时间】:2009-06-23 15:54:00
【问题描述】:
我正在为一些运行 Windows XP 的信息亭构建一个相当专业的屏幕保护程序。用户往往会在没有将浏览器返回到主页的情况下离开信息亭,因此屏幕保护程序会执行以下操作:
- 通过标准屏幕保护机制启动
- 通知用户最近没有活动,并且浏览器将在 X 秒后关闭。
- 如果 X 秒后没有用户活动,屏幕保护程序会终止所有当前浏览器实例(通过 Process.GetProcessesByName)并启动一个指向配置网站的新浏览器实例(通过 Process.Start)。
- 然后屏幕“黑屏”,直到用户移动鼠标或按下某个键 - 此时屏幕保护程序应用程序退出。
当它在 Windows Vista 或 2008 上运行时,一切正常。
但是,在 Windows XP(这是 kiosk 所运行的)上,当屏幕保护程序退出时,浏览器进程会被终止。如果我在屏幕保护程序存在之前添加一个 Thread.Sleep,我可以看到浏览器并与之交互,直到屏幕保护程序退出为止。
为了让事情更加混乱,当我通过单击设置区域中的“预览”按钮运行屏幕保护程序时,Windows XP 不会出现这种行为——也就是说,它的行为与预期相同。在这种情况下运行完全相同的代码。
我在 .NET 2.0 框架下对此进行了测试,后来安装了 .NET 2.0 SP1。在 Windows 2008 工作站上,我有 3.5 SP1。
这些版本的 .NET 在对已启动进程的依赖方面是否存在一些差异?是否可以设置一些标志来确保启动的浏览器进程没有“附加”到屏幕保护程序应用程序?
【问题讨论】:
标签: c# .net windows-xp