【发布时间】:2012-03-07 12:47:56
【问题描述】:
我正在编写一种 PC 预订应用程序(C# 中的客户端),除了当用户登录 PC(Windows 7 / Vista)时我无法尽快启动它之外,一切都已完成,即我想以某种方式覆盖 explorer.exe。
我试图用 explorer.exe 替换我的应用程序,
“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell”
它可以工作,但是当我尝试在我的应用中启动 explorer.exe 时,
const string explorer = "explorer.exe";
string explorerPath = string.Format("{0}\\{1}", Environment.GetEnvironmentVariable("WINDIR"), explorer);
Process eProcess = new Process();
eProcess.StartInfo.FileName = explorerPath;
eProcess.StartInfo.UseShellExecute = true;
eProcess.StartInfo.CreateNoWindow = true;
eProcess.Start();
eProcess.WaitForInputIdle();
它只是挂起并且没有按应有的方式启动资源管理器。
我还尝试了许多其他“解决方法”,以根据不同的注册表项开始,
http://technet.microsoft.com/en-us/magazine/ee851671.aspx
但似乎没有一个在 Windows 7 / Vista 中可以 100% 工作。在 XP 中它似乎工作得更好。
顺便说一句:UAC 在所有将要运行的机器上都关闭。
任何建议都会很好 - 现在我被卡住了。
谢谢。
【问题讨论】:
-
我没有时间玩并提供一个真正的答案,但“UseShellExecute”设置对我来说似乎是错误的——shell 通常是资源管理器(除了你的情况,我猜它是你的程序),它尚未运行,因此不太可能自行启动。您是否尝试将其设置为 false?
-
嗨,涛。是的 - 我也考虑过这一点,并尝试将 UseShellExecute 设置为 false。我现在确实有一个资源管理器窗口,但没有外壳,没有任务栏等等。
标签: c# shell windows-7 explorer winlogon