|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как запустить приложение через Cmd с параметрами?
Приветствую всех!
Пожалуйста, подскажите как запустить приложение с параметрами через командную строку таким образом: Код:
cmd.exe /c start affinity 1 C:\Program Files\Project\Program.exe -minimize программа должна запускаться и окна cmd не должно быть видно вообще. Играл с WinExec и ShellExecute - не выходит... Как правильно это сделать? Заранее благодарю. |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Alloc (01.02.2015)
|
#3
|
||||
|
||||
Цитата:
спасибо! Вроде как работает.. проверьте пожалуйста, правильно ли все сделал (что касается командной строки и самого кода)? Код:
WinExec(Pchar('cmd.exe /c start /affinity 1 /d "'+ExtractFileDir(Application.ExeName)+'" '+'Revenant.exe "'+Keys+'"'), SW_HIDE) И еще вопрос: Как сюда прикрутить коды ошибок которые возвращает функция и дать соответствующее сообщение о них в MessageBox? |
#4
|
||||
|
||||
Код:
if WinExec('...', SW_HIDE)<32 then RaiseLastOSError; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Alloc (01.02.2015)
|
#5
|
||||
|
||||
Для "32" должна же быть какая-то константа?
If the function succeeds, the return value is greater than 31. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Alloc (03.02.2015)
|
#6
|
||||
|
||||
Цитата:
Цитата:
достаточно с 32 сравнить Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Alloc (03.02.2015)
|
#7
|
||||
|
||||
Спасибо, разобрался)
|
#8
|
|||
|
|||
Где то вычитывал, что правильнее использовать ShellExecute.
Код:
function ShellExecute(hWnd: HWnd; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall; в uses подключить ShellAPI и используем. Пример: Код:
ShellExecute(0,'open','cmd.exe',Pchar('/c start /'+номер_ядра+' '+'/'+приоритет_если нужен'+DirGames),pchar(ExtractFileDir('полный путь до программы')),SW_HIDE); подробнее можно посмотреть в google или на msn=) А есть еще такая фигня если запускать надо программу по определенным ядром. Код:
procedure Tform1.RunProcess(FilePatch: string; {Priority: TProcessPriority;} corenumber:integer); var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; Done: Boolean; cpuset : set of 0..31; begin FillChar(StartInfo, SizeOf(TStartupInfo), #0); FillChar(ProcInfo, SizeOf(TProcessInformation), #0); StartInfo.cb := SizeOf(TStartupInfo); CmdLine := Format('"%s" %s', [FilePatch,''{параметры запуска}]); UniqueString(CmdLine); try Done := CreateProcess(PChar(FilePatch), PChar(CmdLine), nil, nil, False, CREATE_NEW_PROCESS_GROUP + Integer(Priority), nil, PChar(ExtractFileDir(FilePatch)) , StartInfo, ProcInfo); if Done then begin // 0 = <All Processors> // 1 = CPU 0 // 2 = CPU 1 // 3 = CPU 2 // 4 = CPU 3 // 5 = CPU 5 // 6 = CPU 6 // 7 = CPU 6 // 8 = CPU 7 cpuset:=[corenumber]; //include (cpuset,5); // add cpu 6 SetProcessAffinityMask(ProcInfo.hProcess, dword(cpuset)); try while not Application.Terminated and (WaitForSingleObject(ProcInfo.hProcess, 100)=WAIT_TIMEOUT) do Application.ProcessMessages; finally if ProcInfo.hProcess <> 0 then CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; end else MessageDlg('Программа не запустится ' + FilePatch, mtError, [mbOk], 0) finally end; end; Последний раз редактировалось MotoArhangel, 03.02.2015 в 16:42. |
#9
|
||||
|
||||
вообще-то вместо WinExec рекомендуется использовать CreateProcess.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
MotoArhangel (04.02.2015)
|
#10
|
|||
|
|||
Код ниже и оставил=)
|