0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 18
1

Поочередный запуск cmd файлов в Delphi

16.10.2014, 14:14. Показов 3168. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно поочередно установить на компьютер несколько программ, и я запускаю сmd файлы:

Delphi
1
2
ShellExecute(Handle, 'open', PChar('Adobe_reader\silent.cmd'), nil, nil, SW_Hide); 
ShellExecute(Handle, 'open', PChar('ccleaner\silent.cmd'), nil, nil, SW_Hide);
и т. д.

Установка начинается одновременно. Как запустить их по очереди?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2014, 14:14
Ответы с готовыми решениями:

Запуск cmd из delphi
Здравствуйте, подскажите пожалуйста! есть .cmd который находится где то на пк пусть к нему...

Запуск файла cmd программно
Уважаемые подскажите где у меня косяк. Запускаю программно Create_ISO.cmd' вот так ...

Программный запуск cmd от имени администратора
Имеется форма, на ней кнопка. Суть в том, чтобы при нажатии на кнопку открывалась командная строка...

Запуск .bat файла и вывод текста из cmd окна
Доброго времени суток! Возник такой вопрос: 1. Как запустить .bat файл, а потом в delphi,...

4
Native x86
Эксперт Hardware
5520 / 3279 / 934
Регистрация: 13.02.2013
Сообщений: 10,388
16.10.2014, 14:25 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// запуск внешней программы и ожидание ее завершения, если Hide = True, то ConsoleOutput заполняется косольным выводом программы
function StartAndWait(const CmdLine, WorkFolder: string; const TimeOut: Cardinal; const Hide: Boolean; out ExitCode: Cardinal; out ConsoleOutput: AnsiString): Integer;
var
  si: TStartupInfo;
  pi: TProcessInformation;
  hReadOut, hWriteOut, hReadIn, hWriteIn: THandle;
  sa: TSecurityAttributes;
  Buff: array[Byte] of AnsiChar;
  Avail, tc: Cardinal;
  Readed: Integer;
begin
  ZeroMemory(@si, SizeOf(si));
  si.cb:= SizeOf(si);
  si.dwFlags:= STARTF_USESHOWWINDOW;
  if Hide then
    begin
      ZeroMemory(@sa, SizeOf(sa));
      sa.nLength:= SizeOf(sa);
      sa.bInheritHandle:= True;
      sa.lpSecurityDescriptor:= nil;
      CreatePipe(hReadOut, hWriteOut, @sa, 0);
      CreatePipe(hReadIn, hWriteIn, @sa, 0);
 
      si.wShowWindow:= SW_HIDE;
      si.dwFlags:= si.dwFlags or STARTF_USESTDHANDLES;
      si.hStdInput:= hReadIn;
      si.hStdOutput:= hWriteOut;
      si.hStdError:= hWriteOut;
    end
  else
    si.wShowWindow:= SW_SHOW;
 
  if CreateProcess(nil, PChar(GetEnvironmentVariable('COMSPEC')+' /C '+CmdLine), nil, nil, True, 0, nil, IIf(WorkFolder <> '', PChar(WorkFolder), nil), si, pi) then
    begin
      ConsoleOutput:= '';
      tc:= GetTickCount+TimeOut;
      repeat
        Sleep(100);
        if Hide then
          while PeekNamedPipe(hReadOut, nil, 0, nil, @Avail, nil) and (Avail > 0) do
            begin
              Readed:= FileRead(hReadOut, Buff, Min(Avail, SizeOf(Buff)-1));
              Buff[Readed]:= #0;
              ConsoleOutput:= ConsoleOutput+AnsiString(Buff);
            end;
      until (not GetExitCodeProcess(pi.hProcess, ExitCode)) or
            (ExitCode <> STILL_ACTIVE) or
            ((TimeOut > 0) and (GetTickCount > tc));
 
      if ExitCode = STILL_ACTIVE then
        if TerminateProcess(pi.hProcess, 0) then
          Result:= 1 // Timeout expired
        else
          Result:= 2 // Timeout expired, not killed
      else
        Result:= 0; // OK
 
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    end
  else
    Result:= -1; // Execute error
 
  if Hide then
    begin
      CloseHandle(hReadOut);
      CloseHandle(hWriteOut);
      CloseHandle(hReadIn);
      CloseHandle(hWriteIn);
    end;
end;
Добавлено через 3 минуты
Используемые внутри функции:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function IIf(const Expression: Boolean; const IfTrue, IfFalse: Pointer): Pointer;
begin
  if Expression then
    Result:= IfTrue
  else
    Result:= IfFalse;
end;
 
function Min(const Val1, Val2: Cardinal): Cardinal;
begin
  if Val1 < Val2 then
    Result := Val1
  else
    Result := Val2;
end;
1
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
16.10.2014, 14:50 3
ShellExecuteEx
0
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 18
16.10.2014, 15:18  [ТС] 4
ShellExecuteEx?
так что ли?
Delphi
1
ShellExecuteEx(Handle, 'open', PChar('Adobe_reader\silent.cmd'), nil, nil, SW_Hide);
компилятор выдает ошибку.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
16.10.2014, 15:25 5
Лучший ответ Сообщение было отмечено znukut как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
var
  ShExecInfo: SHELLEXECUTEINFO;
begin
  ZeroMemory(@ShExecInfo, SizeOf(SHELLEXECUTEINFO));
  with ShExecInfo do
  begin
    cbSize := SizeOf(SHELLEXECUTEINFO);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    lpFile := 'D:\silent.cmd';
    nShow := SW_SHOW;
  end;
  ShellExecuteEx(@ShExecInfo);
  WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
  ShowMessage('Готово!');
end;
1
16.10.2014, 15:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2014, 15:25
Помогаю со студенческими работами здесь

Из CMD B Delphi
Я выполняю команду ShellExecute(0,nil,'cmd.exe','/c команда',nil,SW_Hide) можно ли перехватить...

Delphi и CMD
Подскажите пожалуйста, можно ли написать на D7 программу, которая запускала бы командную строку...

Delphi 7 и CMD
Есть необходимость написать прогу для обнаружения и удаления определенных обновлений Windows. ...

Delphi, Java и cmd
Здравствуйте! Пишу программу типа эмулятор консоли (cmd), скорее лаунчера сервера для игры, обычно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru