Запуск консольного и MS-DOS приложения без закрытия окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Запуск консольного и MS-DOS приложения без закрытия окна

Сообщение Alexanbar » 22.10.2006 (Вс) 16:49

Обычно после запуска таких приложений чёрное окошко закрывется, а я хочу, чтобы можно было посмотреть, какие результаты выведены.

Сейчас делаю так.
В WINNT:
Код: Выделить всё
Dim SHE as shellexecuteinfo

with SHE

    .lpfile="путь к cmd.exe"
    .lpparameters="/k (" & "путь к приложению" & " " & командная_строка_приложения_включая_кавычки)
.....

end with
....

В w98:
Код: Выделить всё
Dim SHE as shellexecuteinfo

with SHE

    .lpfile="путь к command.com"
    .lpparameters="/k " & "путь к приложению" & " " & командная_строка_приложения_включая_кавычки
.....

end with
....


Основной недостаток - ограничения в длине командной строки (см. lpparameters). Особенно это сказывается в w98.

P.S. В качестве приложений используются консольные (и для DOS) утилиты разработчиков антивирусных программ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.10.2006 (Вс) 16:57

Создать ярлык (как создавать ярлыки - см. в поиске), в котором снять галку "Закрывать окно по завершении работы"...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.10.2006 (Вс) 18:09

Не подходит. Нужно каждый раз менять командную строку для приложения (список файлов меняется)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 22.10.2006 (Вс) 20:06

В MSDN написано, что при запуске одного консольного приложения из другого консоль наследуется. Из этого можно предположить, что если в твоем приложении создать консоль, то она не закроется после того как другое приложение отработает.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.10.2006 (Вс) 20:18

Дело в том, что так, как я сделал, работает, но допустимая командная строка мала. Особенно при использовании Command.com.
А если просто запустить консольное приложение, то он по окончании работы закрывает окно.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.10.2006 (Пн) 11:25

pause в командном файле в конце и он остановится :)

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 13:21

А нету командного файла. Из приложения всё запускается.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 23.10.2006 (Пн) 13:29

Alexanbar
Я не врубился, чем плох мой способ?
Возможная длина командной строки там максимальна.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 15:17

Не хочется огород городить:
- создавать *.bat файл
- запускать его;
- уничтожать.

Проще (и надёжнее!) тогда создать список файлов, и передавать его сканеру. только логика интергации сканера в приложение пока не такая. наверное, так придётся в будущем поступать. и + мой код, что выше- для просмотра результатов.

Касперский свои секреты не хочет выдавать (как запустить сканер с GUI) - отсылает к консольному приложению.

Хочется, чтобы ничего не делать сверхсложного, но чтобы всё работало. может быть, иной способ есть.
Последний раз редактировалось Alexanbar 23.10.2006 (Пн) 15:21, всего редактировалось 1 раз.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 15:21

ANDLL писал(а):В MSDN написано, что при запуске одного консольного приложения из другого консоль наследуется. Из этого можно предположить, что если в твоем приложении создать консоль, то она не закроется после того как другое приложение отработает.


Вот именно . Приложение отработало - и консоль закрывается. Опять же моё приложение - не консольное.
Собстьвенно говоря, своим кодом я и создаю такую консоль, кторая не закроется
Последний раз редактировалось Alexanbar 23.10.2006 (Пн) 15:25, всего редактировалось 1 раз.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.10.2006 (Пн) 15:24

а может просто прочитать stdout данной консоли и отобразить в своем приложении :?:

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 15:26

Konst_One писал(а):а может просто прочитать stdout данной консоли и отобразить в своем приложении :?:


Подробнее

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 23.10.2006 (Пн) 15:28

CreatePipe
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 23.10.2006 (Пн) 15:33

CreatePipe
Честно говоря, Alexanbar делает что-то не то.
Код в студию.
Ибо консоль должна наследоваться, и я не верю, что завершаясь программа вдруг возьмет и закроет чужую консоль.
Опять же моё приложение - не консольное
Это не страшно. Если не консольное - значит ОС не будет открывать консоль. Ее надо открыть вручную.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.10.2006 (Пн) 15:40

вот простенький примерчик:
Вложения
DOS Output.rar
(9.49 Кб) Скачиваний: 82

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 18:25

ANDLL писал(а):
CreatePipe
Честно говоря, Alexanbar делает что-то не то.
Код в студию.
Ибо консоль должна наследоваться, и я не верю, что завершаясь программа вдруг возьмет и закроет чужую консоль.
Опять же моё приложение - не консольное
Это не страшно. Если не консольное - значит ОС не будет открывать консоль. Ее надо открыть вручную.


Предположим, нужно запустить консольное приложение drwebwcl.exe из комплекта DrWeb.
Нажимаем кнопку ПУск- далее - выполнить. Набираем в командной строке:

Код: Выделить всё
"путь к файлу drwebwcl.exe" "d:\test"


Что произойдёт? На экране появится чёрное окно, начнётся проверка на вирусы, по окончании которой это самое чёрное окно САМО ПО СЕБЕ ЗАКРОЕТСЯ. без каких-либо действий с моей стороны.
Тоже самое я раньше делал программно, через Shellexecuteex.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.10.2006 (Пн) 18:51

Konst_One писал(а):вот простенький примерчик:


набираю в примерчике такую строку:
Код: Выделить всё
"C:\Program Files\DrWeb\drwebwcl.exe" f:\virus


В класс-модуле DOSOutputs в ф-и ExecuteCommand
Код: Выделить всё
...
'Read the ReadPipe handle
   
    Do
        ret = ReadFile(hReadPipe, strBuff, 256, lngBytesread, 0&)
       
        mOutputs = mOutputs & Left(strBuff, lngBytesread)
        'Send data to the object via ReceiveOutputs event
        RaiseEvent ReceiveOutputs(Left(strBuff, lngBytesread))
    Loop While ret <> 0
....

возвращается ret=0 и, соответственно, lngBytesread=0. Т.е, ничего в текстбокс не попадает.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.10.2006 (Вт) 10:56

Код: Выделить всё
Dim sExec as String

ChDrive "C"
ChDir "C:\Program Files\DrWeb\"

sExec="drwebwcl.exe f:\virus"

...


думаю, что все понятно

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 24.10.2006 (Вт) 11:59

Konst_One писал(а):
Код: Выделить всё
Dim sExec as String

ChDrive "C"
ChDir "C:\Program Files\DrWeb"

sExec="drwebwcl.exe f:\virus"

...


думаю, что все понятно


К сожалению, результат тот же. Если вместо drwebwcl.exe запустить drweb386.exe (DOS-прил.), выходит окно DOS, идёт проверка и закрытие окна. При запуске drwebwcl.exe (консольное) MousePointer=11 , потом становится MousePointer=0 , и в текстовое поле ничего не поступает.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.10.2006 (Вт) 12:01

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

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.10.2006 (Вт) 12:02

http://www.drweb.ru/download/#h29

напиши какой из этих дистрибутивов у тебя сейчас работает

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 24.10.2006 (Вт) 17:24

DrWeb для рабочих станций. Версия 4.33.2.

Кстати, попробовал запустить zip.exe и Unzip.exe. В текстовое поле вывод идёт, но выводится не совсем то, что они выводят в чёрном окне.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 24.10.2006 (Вт) 17:51

stderror, в него тоже что-то идёт.
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.10.2006 (Ср) 11:09

DrWeb для рабочих станций. Версия 4.33.2.


очень странно, я себе такую же версию поставил, но там нет таких файлов: drwebwcl.exe и drweb386.exe

кстати, stderror вполне может быть твой случай.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 25.10.2006 (Ср) 16:13

Konst_One писал(а):
DrWeb для рабочих станций. Версия 4.33.2.


очень странно, я себе такую же версию поставил, но там нет таких файлов: drwebwcl.exe и drweb386.exe

кстати, stderror вполне может быть твой случай.


Так эти компоненты по требованию ставятся. (компоненты по выбору). Их надо во время инсталляции ставить. Это называеься в инсталляторе "DrWeb консольный сканер для Windows" и "DrWeb сканер для DOS"

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.10.2006 (Ср) 16:43

"DrWeb сканер для DOS" - это вообще только для 98 винды
"DrWeb консольный сканер для Windows" - у меня большие сомнения в корректности его работы с stdout

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.10.2006 (Ср) 16:45

попробуй делать перенаправление вывода в файл:

Код: Выделить всё
drwebwcl.exe f:\virus >1.txt


а уже 1.txt читать

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 25.10.2006 (Ср) 16:54

все, поставил, проверил.
они свою консоль вставляют графическую, так что ничего ты там не отловишь

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 25.10.2006 (Ср) 20:25

Konst_One писал(а):попробуй делать перенаправление вывода в файл:

Код: Выделить всё
drwebwcl.exe f:\virus >1.txt


а уже 1.txt читать


Недостатки:
1) юзверь будет неекоторое время в неведении, что происходит. ОДна мыша, быть может, будет говорить, что прога не зависла.
2) Иногда проги в файл не пишут ничего.

Вот запустил этого drwebwcl, а он говорит, что у меня лицензии на эту утилиту нет. На чёрном экране показывает загрузку базы, а файл образуется нулевой длины.

kavshell.exe (из комплекта KAV 5) результаты в файл выводит.

В принципе, этот вариант имеет право на сущестование.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 26.10.2006 (Чт) 11:05

проблема в том, что дрвеб некорректно работает с консолью. тут уж я не знаю что посоветовать. может стоит использовать другой антивирусный пакет :?

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 105

    TopList