Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
5438 / 2145 / 450
Регистрация: 20.11.2009
Сообщений: 7,178
Записей в блоге: 1
1

Задать правильно параметры в командной строке.

19.11.2012, 04:47. Просмотров 2333. Ответов 4


всем доброго времени суток

уже измучался, не могу найти решение как сделать правильно

вот привожу вырезку командной строки и код в дельфи


тут хранится путь до компилятор паскаля
Код
FilePath
вот так выглядит строка запроса командной строки
Delphi
1
ShellExecute(Handle, nil, PChar(FilePath), 'prog.pas > err_msg.txt', nil, SW_SHOWNORMAL);
не работает !!!!

убираю вот
Код
 > err_msg.txt
эту часть,
остается только это
Delphi
1
ShellExecute(Handle, nil, PChar(FilePath), 'prog.pas', nil, SW_SHOWNORMAL);
у меня все компилируется нормально паскалевским компилятором, если та часть будет присутствовать, тогда ничего вообще не происходит

из кода ошибки и методом "загугливания" этой ошибки я понял, что мне командная строка не может разделить данную часть на 2 параметра, а считает ее как одно целое, что якобы нужно брать обе части в кавычки, беру в кавычки, ошибка говорит мне "не могу найти err_msg.txt", уже игрался до невозможности с этими кавычками все варианты перепробовал - ничего не изменилось, либо ноль реакции - либо ошибка о не нахождении второй части, как быть мне в данной ситуации?

из картинки видно, что файл с ошибкой появился, и видим, что там за ошибку написал компилятор нам, это я специально написал программу с ошибкой

за 2 часа не сдвинулся ни на шаг

Спасибо заранее
0
Миниатюры
Задать правильно параметры в командной строке.  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2012, 04:47
Ответы с готовыми решениями:

Как правильно задать параметры для процедуры в ADOCommand?
не получается задать параметры для процедуры на сервере. вроде все как надо по книжкам:...

Параметры командной строки
Есть программа project1.exe Мне нужно чтобы если её зпускаешь просто клипом ничего не происходило...

Как задать параметры в задаче?
Дан массив размера n и чесло к (0<k<5, k<n) осуществить цикличекий сдвиг элементов массива на л...

Задать параметры listbox через scrollbar
Как изменить количество строк компонента listbox с помощью scrollbar?

__________________
Помогаю в написании курсовых работ и дипломов здесь.
4
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
19.11.2012, 05:36 2
Тут вопрос, понимается ли ссылка (">") на создаваемый лог-файл.
Delphi
1
2
  ShellExecute(Handle, nil, PChar(FilePath), 'prog.pas > err_msg.txt', nil, SW_SHOWNORMAL);
  ShellExecute(Handle, nil, PChar(FilePath), 'prog.pas', nil, SW_SHOWNORMAL);
и так и так компилируется, но лог-файл не создаётся.
0
Arcor
19.11.2012, 13:56  [ТС]
  #3

Не по теме:

Цитата Сообщение от angstrom Посмотреть сообщение
и так и так компилируется
ты уверен? я не очень.....
Цитата Сообщение от angstrom Посмотреть сообщение
...но лог-файл не создаётся.



Не по теме:

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

0
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
19.11.2012, 15:00 4
Цитата Сообщение от Arcor Посмотреть сообщение
ты уверен? я не очень.....
1. Прежде чем отвечать, я проверяю.
Цитата Сообщение от Arcor Посмотреть сообщение
и к чему ты написал этот пост тогда? абы что-то написать......, ты прочти что конкретно я спрашивал....

вот так выглядит строка запроса командной строки
Delphi
1
ShellExecute(Handle, nil, PChar(FilePath), 'prog.pas > err_msg.txt', nil, SW_SHOWNORMAL);
не работает !!!!
Как я писал выше работает, но без создания лог-файла. command.com и ShellExecute работают по-разному.

Добавлено через 22 минуты
На сладкое. Этот код я использовал в проекте визуального конструирования API-программ
Кликните здесь для просмотра всего текста
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
function ExecDcc32(const aProjectPath, aErrorPath : String): Boolean;
var
  SecurAtt    : TSecurityAttributes;
  ResultCode  : DWORD;
  hStdOut     : THandle;
  StartupInfo : TStartupInfo;
  ProcessInfo : TProcessInformation;
begin
  Result := False;
  hStdOut := INVALID_HANDLE_VALUE;
  try
    // установки атрибутов безопасности
    with SecurAtt do
    begin
      nLength := SizeOf(SecurAtt);
      lpSecurityDescriptor := NIL;
      // разрешить наследование дочернему процессу
      bInheritHandle := BOOL(True);
    end;
    // создание файла, в который будут направляться ошибки
    hStdOut := CreateFile(PChar(aErrorPath), GENERIC_WRITE, 0, @SecurAtt, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if hStdOut = INVALID_HANDLE_VALUE then
      raise Exception.Create('Can''t create file ' + aErrorPath);
    // заполнение структуры, специфицирующей создание процесса
    ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
    with StartupInfo do
    begin
      CB := SizeOf(StartupInfo);
      // скрывать окно компилятора и наследовать потоки ввода-вывода
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdOutput := hStdOut;
    end;
    // создать и стартовать процесс компилятора
    if not CreateProcess(PChar(DelphiPath + 'dcc32.exe'), PChar(aProjectPath), @SecurAtt, @SecurAtt, BOOL(True), 0, NIL, PChar(DelphiPath), StartupInfo, ProcessInfo) then
    raise Exception.Create('Can''t create process ' + 'dcc32.exe');
    // ждать завершение компиляции неопределенное время
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    // получить результат компиляции
    ResultCode := 0;
    GetExitCodeProcess(ProcessInfo.hProcess, ResultCode);
    Result := ResultCode = 0;
  finally
    // закрыть файл ошибок
    if hStdOut <> INVALID_HANDLE_VALUE then
      CloseHandle(hStdOut);
  end;
end;
0
13065 / 5851 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
19.11.2012, 17:28 5
Arcor, здесь особенность в том, что команда перенаправления вывода ">" предназначается для интерпретатора CMD.EXE. Соответственно, нужно вызвать интерпретатор команд CMD.EXE. Ему надо передать в качестве параметра путь к исполняемому файлу, который он должен запустить на выполнение - в данном случае это компилятор Pascal. При этом надо передать некоторые параметры самому CMD.EXE и приложению, которое будет запущено из под CMD.EXE. Ну и потом надо обозначить направление вывода - в заданный файл.
Делается так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses
  ShellAPI;
 
//Запуск приложения через CMD.EXE и вывод сообщений приложения в файл.
procedure TForm1.Button1Click(Sender: TObject);
var
  Cmd, App, Log, Par : String;
begin
  //CMD.EXE.
  Cmd := 'cmd.exe';
  //Приложение, которое должно быть запущено через CMD.EXE.
  //Вместе с параметрами командной строки этого приложения (если есть).
  App := '"d:\bp\bin\bpc.exe "D:\Projects\Cyber\Bp\0001\Project1.pas""';
  //Путь к файлу, в который будут выведены сообщения приложения App.
  Log := 'D:\Projects\Cyber\Bp\0001\log.txt';
  // /K - не закрывать окно CMD.EXE после выполнения команды. - Например, на время отладки.
  Par := '/K ' + App + '>' + Log;
  // /C - закрыть окно CMD.EXE после выполнения команды.
  //Par := '/C ' + App + '>' + Log;
  ShellExecute(Handle, nil, PChar(Cmd), PChar(Par), nil, SW_SHOWNORMAL);
end;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2012, 17:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Параметры командной строки
Подскажите пожалуйста, какие у лазаруса параметры командной строки и в какую папку складываются...

Генератор паролей. Как задать параметры генерации?
Делаю генератор паролей, хотел организовать возможность выбирать какие-то характеристика типа,...

Параметры командной строки
В программе нужно принимать параметры командной строки.В цикле используя paramCount считываю...

При компиляции консольного приложения задать параметры командной строки
Доброго времени суток. Знаю, что в VS есть вот такое средство: Properites-&gt;Debugging-&gt;Command...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.