У меня есть замена оболочки, которая должна перезапустить 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 кто-нибудь сталкивался с решением этой
Я думал, что это первый экземпляр исследователя, который запустил оболочку. Возможно, в тестах XP/Vista «запуск окон папки для папки в отдельном процессе» не были проверены, а в «7» - так, что вы на самом деле не убиваете всех «explorer.exe». –
Я использую ctrl shift правой кнопкой мыши на кнопке запуска, чтобы убедиться, что во время тестирования нет исследователей. Для развертывания это необязательно, поскольку оно заменяет оболочку. –