2012-01-11 1 views
1

У меня есть замена оболочки, которая должна перезапустить Explorer. В настоящее время я использую:Как программно перезапустить проводник с помощью Delphi 2007/Xe2 в Windows 7

CreateProcess(nil, zAppName, { pointer to command line string } 
    nil, { pointer to process security attributes } 
    nil, { pointer to thread security attributes } 
    false, { handle inheritance flag } 
    CREATE_NEW_CONSOLE or { creation flags } 
    NORMAL_PRIORITY_CLASS, nil, { pointer to new environment block } 
    nil, { pointer to current directory name } 
    StartupInfo, { pointer to STARTUPINFO } 
    ProcessInfo) { pointer to PROCESS_INF } 

Что прекрасно работает в Windows XP/Vista и т.д., но на Windows 7 вместо перезагрузки Explorer, он просто открывает окно проводника.

In answer to a related question for .Net, Robolt писал:

Я заметил, что никто не рассматривал вопрос о стартовом explorer.exe в качестве оболочки, нежели это просто открыть окно проводника. Взял меня некоторое время, чтобы понять это, оказывается, что это было что-то просто ":.

string explorer = string.Format("{0}\\{1}", Environment.GetEnvironmentVariable("WINDIR"), "explorer.exe"); 
Process process = new Process(); 
process.StartInfo.FileName = explorer; 
process.StartInfo.UseShellExecute = true; 
process.Start(); 

Вы должны установить StartInfo.UseshellExecute как истинный, чтобы заставить его перезапускать в качестве оболочки

Но .? Я не могу узнать, как сделать это в Delphi кто-нибудь сталкивался с решением этой

+0

Я думал, что это первый экземпляр исследователя, который запустил оболочку. Возможно, в тестах XP/Vista «запуск окон папки для папки в отдельном процессе» не были проверены, а в «7» - так, что вы на самом деле не убиваете всех «explorer.exe». –

+0

Я использую ctrl shift правой кнопкой мыши на кнопке запуска, чтобы убедиться, что во время тестирования нет исследователей. Для развертывания это необязательно, поскольку оно заменяет оболочку. –

ответ

2

как следует из названия, UseShellExecute свойство делает использование программы ShellExecute, альтернативный, который вы используете, является CreateProcess.

+0

Это. Добавьте ShellApi к использованию, вызовите ShellExecute. Выполнено –

+0

Это работает для XP, но не для Windows 7. –