Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 08:57   #1
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию ShelExecute, консольная утилита и вывод в файл результата

Подскажите кто знает.
Чтобы получить список серверов в винде есть утилита osql.
Ее запуск из консоли в таком виде: osql -L >c:\list.txt формирует файл, в котором и получаем список серверов.

В Дельфи (2009) запуск функции ShellExecute кончается неудачей.
Код:
//что так:
  R := ShellExecute(Handle, 'open', PChar('osql.exe'), PChar('-L >c:\list.txt'), nil, SW_SHOWNORMAL);
//что так:
  R := ShellExecute(Handle, 'open', PChar('osql.exe >c:\list.txt'), PChar('-L'), nil, SW_SHOWNORMAL);
//что так:
  R := ShellExecute(Handle, 'open', PChar('osql.exe -L >c:\list.txt'), nil, nil, SW_SHOWNORMAL);
Без перенаправления в файл (>c:\list.srv) функция то отрабатывает правильно.
Вопрос в общем виде, как получить файл со списком серверов из программы на Дельфи?
Вытекающий из приведенной проблемы вопрос: перенаправление в файл функцией ShellExeute не поддерживается что ли?
Прик вне форума Ответить с цитированием
Старый 19.04.2011, 14:36   #2
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Цитата:
перенаправление в файл функцией ShellExeute не поддерживается что ли?
Вообще то это функция интерпретатора командной строки - cmd.exe. Но можно обойтись и без файлов: http://www.delphisources.ru/pages/fa...le_output.html

Последний раз редактировалось eduard93; 19.04.2011 в 14:40.
eduard93 вне форума Ответить с цитированием
Старый 19.04.2011, 14:54   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Спасибо.
Похожую конструкций уже пытал.
Не знаю почему, но при вызове и той, и предложенной функции ломаемся на CreateProcess (AV в kernell32.dll). Чем моя винда не угодила CreateProcess'у пока не выяснено.
Прик вне форума Ответить с цитированием
Старый 19.04.2011, 15:40   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Перенаправление вывода через > работать не будет, это фишка cmd.exe. Нужно самому реализовать перенаправление вывода или выполнять программу через cmd

Код:
R := ShellExecute(Handle, 'open', PChar('cmd.exe'), PChar('/C osql.exe -L > c:\list.txt'), nil, SW_SHOWNORMAL);
AV в kernell32.dll бывает с CreateProcess в Delphi 2009 и старше, спасибо Microsoft, там нельзя передавать в качестве параметра константу.
Цитата:
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
--

В следующий раз я буду читать предыдущие ответы
пыщь

Последний раз редактировалось JTG; 19.04.2011 в 16:01.
JTG вне форума Ответить с цитированием
Старый 19.04.2011, 16:31   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Используйте WinExec и всё нормально отработается.
FaTaL вне форума Ответить с цитированием
Старый 19.04.2011, 16:53   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
...нельзя передавать в качестве параметра константу.
Не перадаю константу, передаю обычный параметр (string без cons), тем не менее, облом (AV). Фиг знает чего ей (этой функции) надо.
cmd сработало. Но будет ли эта cmd работать в семерке? Вопрос.

----
Цитата:
Используйте WinExec и всё нормально отработается.
Увы, не работает. Ошибок нет, но и файл не создается и утилита не запускается. Для 16-ти битных ОС функция.

Последний раз редактировалось Прик; 19.04.2011 в 17:32.
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод результата запроса в файл vladtr Microsoft Office Access 3 30.03.2011 15:13
Вывод результата в Memo Giggs13 Общие вопросы Delphi 1 20.02.2011 12:56
вывод результата на порт В ТатьянаП Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.10.2010 07:28
Консольная программа на Си: ввод, вывод, сортировка, сохранение в текстовый файл. zerg Помощь студентам 8 16.11.2007 12:57