C# Windows XP屏幕保护程序-启动的进程与屏幕保护程序一起死亡
我正在为一些运行WindowsXP的信息亭构建一个专门的屏幕保护程序应用程序。用户倾向于离开信息亭而不将浏览器返回主页,因此屏幕保护程序执行以下操作:C# Windows XP屏幕保护程序-启动的进程与屏幕保护程序一起死亡,c#,.net,windows-xp,C#,.net,Windows Xp,我正在为一些运行WindowsXP的信息亭构建一个专门的屏幕保护程序应用程序。用户倾向于离开信息亭而不将浏览器返回主页,因此屏幕保护程序执行以下操作: 通过标准屏幕保护程序机制启动 通知用户最近没有活动,浏览器将在X秒后关闭 如果X秒过后没有用户活动,屏幕保护程序将终止所有当前浏览器实例(通过Process.getProcessByName),并启动指向已配置网站的浏览器的新实例(通过Process.Start) 然后屏幕会“清空”,直到用户移动鼠标或按下某个键——此时屏幕保护程序应用程序退出
这些版本的.NET在对已启动进程的依赖性方面是否存在一些差异?是否可以设置一些标志以确保启动的浏览器进程未“附加”到屏幕保护程序应用程序?在调用process.Start()之前,请尝试将process.StartInfo.UseShellExecute设置为False(默认为True)。这样,CreateProcess()在内部使用,而不是ShellExecute()。Windows XP在其自己的虚拟桌面上运行屏幕保护程序。除非您另行指定,否则从那里开始的任何进程都会将虚拟机作为自己的进程继承。当屏幕保护程序退出时,虚拟桌面将被真正的桌面所取代,然后砰的一声 编辑:有关详细信息,请参阅以下Microsoft MSDN页面:
有一些包装了Windows桌面API。它包括一个在不同桌面上打开新进程的功能,如果不直接使用,您至少可以查看该进程。(基本上,Windows API CreateProcess函数有一个参数,允许您指定在哪个桌面上启动进程。)
如果这不起作用,您也可以尝试一下(关于使用SendMessage inter进程获得屏幕保护程序进程之外的另一个进程来实际启动)。这不是流程树问题的最佳答案,但如果流程树不是问题所在,它实际上可能会起作用。这听起来可能是问题所在-您如何指定在哪个桌面上运行子流程?我必须执行您的第二个建议(IPC)。最后,我使用了新的(to.NET3.5)NamedPipeServerStream和NamedPipeClientStream类来实现它,它运行良好。我首先尝试了第一个建议,但从测试来看,Windows XP似乎遵循了一条“安全带和吊杆”规则:它似乎既可以杀死进程树,又可以在不同的桌面上运行,最后IPC方法更容易实现。