![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Приветствую всех!
Пожалуйста, подскажите как запустить приложение с параметрами через командную строку таким образом: Код:
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. |
| Этот пользователь сказал Спасибо 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
|
|||
|
|||
|
Код ниже и оставил=)
|