2012-03-07 3 views
0

Я пишу своеобразное приложение для бронирования ПК (клиент на C#), и все сделано, за исключением того, что у меня есть проблемы с его запуском как можно скорее, когда пользователь входит в систему на ПК (Windows 7/Vista), т.е. я хотите переопределить explorer.exe каким-то образом.Лучший способ запустить приложение «PC booking» в Windows 7/Vista?

Я пытался заменить мое приложение с 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

но никто, кажется, работает на 100% в Windows 7/Vista. В XP это работает лучше.

BTW: UAC выключен на всех машинах, на которых это будет работать.

Любые предложения были бы хороши - прямо сейчас я застрял.

Спасибо.

+0

У меня нет времени, чтобы играть и дать реальный ответ, но параметр «UseShellExecute» выглядит неправильно для меня - оболочка обычно является проводником (за исключением вашего случая, я думаю, это ваша программа), которая не работает тем не менее, поэтому он вряд ли сможет начать сам. Вы пытались установить это на false? – Tao

+0

Hi Tao. Да. Я тоже об этом подумал и попытался установить UseShellExecute в false. Теперь я получаю окно проводника, но нет оболочки, нет панели задач и так далее. –

ответ

0

Не eProcess.WaitForInputIdle();, тогда это сработает.

+0

Спасибо. Я попробую. –

+0

Он также работает, если я установил [HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced] SeparateProcess на 1. –

+0

Хеширование в реестре - очень плохая идея, причина, по которой ваше приложение висела, было из-за call, о котором я упоминал выше, который блокируется при определенном условии, я почти уверен, что explorer.exe никогда не попадает. Почему все-таки ваше приложение должно начинаться перед Explorer? Я почти уверен, что это опасная вещь, чтобы обходиться с Windows ... первый экземпляр explorer делает гораздо больше, чем вы думаете, и изменение способа запуска Windows - это не очень хорошая идея. – qJake