Как программно перезапустить Explorer, используя Delphi 2007 / Xe2 в Windows 7 - PullRequest
1 голос
/ 11 января 2012

У меня есть замена оболочки, которая должна перезапустить Explorer.В настоящее время я использую:

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 вместо перезапуска Проводника он просто открывает окно Проводника.

В ответ наСоответствующий вопрос для .Net , который написал Робольт:

Я заметил, что никто не обращался к вопросу запуска 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 как true, чтобы перезапустить его как оболочку.

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

1 Ответ

2 голосов
/ 11 января 2012

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

...