【发布时间】:2023-03-23 23:22:01
【问题描述】:
我正在实现一个屏幕保护程序来重新启动后台应用程序。我需要重新启动 Firefox 以重置 Windows 信息亭中的主页。我想用屏幕保护程序来做到这一点。我使用的语言是 C#。
代码没有那么复杂,是一种复制粘贴的方式
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686421(v=vs.85).aspx
和
http://www.harding.edu/fmccown/screensaver/screensaver.html
它应该以这种方式工作:屏幕保护程序启动,然后在 10 秒后。杀死应用程序(如果存在),然后在 10 秒后。它再次重新启动应用程序。在所有屏幕保护程序退出后(有一个计时器驱动它)。
问题是屏幕保护程序启动的进程有某种链接到被杀死的屏幕保护程序,因为在用户没有杀死应用程序之前,屏幕保护程序不会重新启动!
我用这个函数来重启应用:
public static void StartAProcess(string executableName)
{
//Process.Start(new ProcessStartInfo(executableName));
RunThread ext = new RunThread();
Thread t = new Thread(new ParameterizedThreadStart(ext.OpenProcess));
t.Start(executableName.ToString());
}
public class RunThread
{
public void OpenProcess(object executableName)
{
ProcessStartInfo si = new ProcessStartInfo();
si.UseShellExecute = true;
si.FileName = (string) executableName;
Process proc = Process.Start(si);
---> if (null != proc)
proc.WaitForExit(); // Block until exit**
}
}
行为因操作系统和 WaitForExit 指令而异:
- 使用 WaitForExit:在 Seven、Vista 和 XP 上,应用程序启动后,屏幕保护程序不会重新启动;
- 没有 WaitForExit:在 Vista/Seven 上与 prec 点相同,在 Windows XP 上,当屏幕保护程序退出时它也会杀死应用程序!
【问题讨论】:
-
大餐后睡着了?
-
那个糟糕的外部进程 ;)
-
它总是有这个问题,还是只有在屏幕保护程序安全时(即它需要密码才能回到您的桌面)?
-
请不要在您的问题前加上“C#:”。这就是标签的用途。
-
屏幕保护程序不安全。
标签: c# windows screensaver