Консультация № 54943
10.09.2006, 19:40
0.00 руб.
0 4 3
Здравствуйте!!!
Скажите пожалуйста, как выполнить перезапуск программы из самой программы. Т.е. работаю я в своей программе и мне надо вернуться в первоначальное состояние, но для этого нужно ее запустить по-новому.
И общий вопрос: как запустить любой имеющийся exe-файл из своей программы? Спасибо за внимание.

Обсуждение

Неизвестный
10.09.2006, 20:35
общий
это ответ
Здравствуйте, Piit!

Если Вам это нужно под Windows, то вот в приложении код, который позволяет "перезапустить себя".

Если нужно запустить другую программу, то замените GetStartupInfo(&si) на
memset(&si,0,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
замените GetCommandLine() на путь к программе (например, "C:\\WINDOWS\\notepad.exe") и уберите ExitProcess(0).

Приложение:
STARTUPINFO si;GetStartupInfo(&si);PROCESS_INFORMATION pi;CreateProcess(NULL,GetCommandLine(),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); // "перезапускаем себя".CloseHandle(pi.hThread);CloseHandle(pi.hProcess);ExitProcess(0); // Завершаем свою программу. Но будет лучше, если Вы тут завершите программу "по-законному", например напишете goto label;, где метка label должна быть установлена прямо перед выходом из main(), или что-нибудь другое.
Неизвестный
10.09.2006, 20:38
общий
это ответ
Здравствуйте, Piit!
Смотрите приложение. Между-прочим, странные вы вопросы задаёте...

Приложение:
uses ShellApi;...procedure TForm1.Button1Click(Sender: TObject);var s: String;begin s := application.ExeName; ShellExecute(Handle,nil,PChar(s),nil,nil,SW_SHOWNORMAL); Application.Terminate;end;
Неизвестный
10.09.2006, 21:47
общий
Прошу прощения, привел код на C. На Delphi, я думаю, будет проще вариант, предложенный Zлоумышленником.
Неизвестный
11.09.2006, 04:58
общий
это ответ
Здравствуйте, Piit!
WinExec(FileName, Sw_normal)
или же через ShellExecute
Форма ответа