Запуск ехе файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Запуск ехе файла

Сообщение bodja » 05.05.2006 (Пт) 0:20

Может глупый вопрос,пытался найти на форуме ответ,не смог.
Как можно запустить произвольную программу (ехе) со своего приложения?
Приведите пару строк плиз,или примерчик если можно.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 05.05.2006 (Пт) 0:49

shell (path, flags)
ХЎ

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 05.05.2006 (Пт) 1:31

Ага,СПАСИБО.

Тогда еще вопрос ,
как можно выдрать из окна в ДОСе информацию,и расположить у себя
например в TEXTBOX?
Ну в плане ,я запускаю программку,она открывает окно в досе ,быстренько там пишет,Ок или не Ок ,и закрывается,
мне необходимо ,что она написала передрать к себе.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 05.05.2006 (Пт) 3:03

Можешь мучаться с CreatePipe, а можешь запустить эту Dos-программу, перенаправив вывод в файл, а потом считать его.
Например:

Код: Выделить всё
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'в самом начале
..............................
Sub funGetDosText()
dim s as string
Shell "c:\chujaya_proga.exe > c:\vremenniy_fail.txt"
Sleep 1000
open  "c:\vremenniy_fail.txt" for input as #1
s = input$(lof(1),#1)
close #1
....
End Sub

Вроде так.. Теперь в переменной s - текст из Доса..

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

Сообщение GSerg » 05.05.2006 (Пт) 3:43

bodja
Хочешь замечание за неиспользование поиска?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 05.05.2006 (Пт) 10:00

GSerg, извени за офтоп, просто хотел бы спросить, как бы ты оформил опрос поиска его второго вопроса?
Guten Morgen! А если не Guten, то тогда это и не Morgen...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 05.05.2006 (Пт) 10:16

"вывод AND DOS". Вторая ссылка ведет на тему, ведущую в поиск по CreatePipe.

ЗЫ Это даже если не знать слова "консоль", не то, что "CreatePipe".
Быть... или не быть. Вот. В чём вопрос?

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 05.05.2006 (Пт) 16:56

AjaxVS
СПАСИБО

uhm
Похоже я еще толком не понял как пользоваться поиском :)
Заместь к примеру "вывод AND DOS" делал "вывод & DOS" и мне выдавало миллион тем :)

Всем спасибо за советы.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 05.05.2006 (Пт) 22:51

2 bodja
Пожалуйста! Не обращай внимание на некоторых личностей форума, иногда они нервные +_+

2 all
Лично я не видел ни одного топика с кодом типа моего.

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

Сообщение GSerg » 06.05.2006 (Сб) 3:34

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2006 (Сб) 7:28

Вдобавок, данный код не будет работать.
Lasciate ogni speranza, voi ch'entrate.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 06.05.2006 (Сб) 23:56

Во-первых, пусть это не самый лучший, но самый простой и удобный код.
Во-вторых, почему не будет работать? Че, апечятался где то? У меня работает. И я очень доволен результатами.

Ну, естественно, вместо Sleep я юзаю функцию funRunAndWait, смысл которой ясен из названия.

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 07.05.2006 (Вс) 0:22

2AjaxVS

Да, такой код к сожалению не "пошел"

программа запускается но в c:\vremenniy_fail.txt она ничего не заносит.
Если записать что нибудь произвольное в vremenniy_fail.txt ,так и остается.
Пробовал увеличить задержку,тоже безрезультатно.

Хорошо ,попрбую еще разобраться с CreatePipe,если мозгов хватит. :)

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 07.05.2006 (Вс) 0:34

странно..
ну, забыл сказать, что вместо Shell я делаю батник и потом его запускаю.. но это уже специфика приложения, в котором я это реализовывал.

Привожу полный код, работающий у меня:
Код: Выделить всё
s = Chr$(34) & s_exe & Chr$(34) & " " & Chr$(34) & s_php & s_qs & Chr$(34) & " > " & Chr$(34) & s_htm & Chr$(34)
i = FreeFile
Open s_bat For Output As #i
Print #i, s
Close #i

Call funRunAndWaitEnding(s_bat, s_process) 'делает ясно что.

i_Navigate = 1
f1.w.Navigate (s_htm)


Кто-то хочет сказать, что этот код - нерабочий? +_+

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.05.2006 (Вс) 10:57

Нерабочий :)

Предположим, ЖД закрыт на запись. Батник просто не создастся.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 07.05.2006 (Вс) 12:41

Amed
А в Temp директорию все равно писать можно :)
Если всё делать своими ручками, они скоро отвалятся !

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.05.2006 (Вс) 12:58

А если на диске места нет? Выйдет накладка.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 07.05.2006 (Вс) 13:05

Amed
А если на диске нет места винда начнет ругаться на пользователя чтоб он дал ей больше свободного места. Вотъ :)
Если всё делать своими ручками, они скоро отвалятся !

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 07.05.2006 (Вс) 13:20

2AjaxVS

Ок !!!
Попробую еще такой вариант.

Я вот думаю может быть проблема в самой программе которую я запускаю из своего приложения.
Дело в том что это компилятор для микроконтроллеров(есть желание подключить его к своему редактору исходного кода),ему нужно указывать в командную строку входные-выходные файлы и флаги форматов вывода.А ошибки он выкладывает в окне ДОСа,может из за всех этих маневров с файлами, он не хочет выдавать результаты компиляции в нужный файл.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 07.05.2006 (Вс) 13:37

Ты сначала просто попробуй запустить cmd.exe и пропиши "путь_к_exe > путь_к_временному файлу" и посмотри, появится запись или нет. Если появится - 100% код рабочий, тока надо его правильно внедрить +_+

ЗЫ. Я надеюсь, ты в курсе, что если "путь_к_файлу" включает в себя пробелы, тебе надо юзать кавычки?

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 07.05.2006 (Вс) 18:35

Пробовал на Wincmd32.exe
работает прекрасно :)

Но в программе нет.
Вот код
Код: Выделить всё
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
.....
Private Sub Command1_Click()
Dim s As String
Dim I As String
I = "c:\1\avrasm32.exe -fI 111.asm > c:\1\err.txt"
Shell I
Sleep 3000
Open "c:\1\err.txt" For Input As #1
s = Input$(LOF(1), #1)
Close #1
RTBedit.Text = s + I
End Sub


Должно работать с кнопки,пути пообрезал как мог,копирую командную строку с проги в wincmd работает,а так нет.
Самое интересное что программа запускается,но действий никаких не
производит (не компилирует и не заносит ничего в err.txt)
А в wincmd все класс.
Пробовал разбить строку на фрагменты и вставлять отдельно пробелы,
то же самое.
Даже не знаю ,что за пурга.
Код: Выделить всё

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 07.05.2006 (Вс) 18:53

Мда... И для кого я писал листинг №2???

1. Вместо
I = "c:\1\avrasm32.exe -fI 111.asm > c:\1\err.txt"
Shell I
Попробуй:
Код: Выделить всё
I = chr$(34) & "c:\1\avrasm32.exe -fI 111.asm" & chr$(34) & " > c:\1\err.txt"
dim i_ff as integer
open "c:\1\temp_prog.bat" for output as #i_ff
print #i_ff, I
close #i_ff
shell "c:\1\temp_prog.bat"
Shell I

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 07.05.2006 (Вс) 23:41

Ураааааа!!!
Поехали,СПАСИБО за помощь,
извиняюсь,просто я не сразу вдуплил в назначение,вот этого
Код: Выделить всё
i = FreeFile
Open s_bat For Output As #i
Print #i, s
Close #i



Вот код который пошел.

Код: Выделить всё
Private Sub Command1_Click()
Dim s As String
Dim I As String
I = "c:\1\avrasm32.exe -fI c:\1\111.asm > c:\1\err.txt"
Open "c:\1\temp_prog.bat" For Output As #1
Print #1, I
Close #1
Shell "c:\1\temp_prog.bat"
RTBedit.Text = I
End Sub


chr$(34) не добавлял,он оставляет кавычки в командной строке.

Но теперь у меня другая проблема,
если запускаю через wincmd у меня программа запускается ,компилирует и закрывается.
А если запускаю через свою программу у меня окно с ДОС открывается
и уже нужно вручную закрывать,при каждом новом запуске появляется еще одно окно ДОС и т.д. Как можно избавиться от этого?

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 08.05.2006 (Пн) 1:11

До слов "Но теперь у меня другая проблема," звучало очень даже хорошо +_+

Если ты в Win9X, то надо в свойствах 2exe поставить "закрывать окно после завершения работы", а вот если в XP... хз.. Но мне кажется, что если строку Shell "c:\1\temp_prog.bat" заменить на
Shell "c:\1\temp_prog.bat", vbHide
то тебе гораздо будет приятнее +_+ окна 2exe видны ваще не будут.. Вроде бы..

Как вариант, я бы дал совет гасить все окна 2exe при закрытии твоей проги, но, боюсь, за такой совет меня загасят "старички" форума +_+

bodja
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.04.2006 (Вс) 15:18
Откуда: Ukraina

Сообщение bodja » 08.05.2006 (Пн) 2:11

Код: Выделить всё
Shell "c:\1\temp_prog.bat", vbHide



Все просто СУПЕР!
Спасибо большое,с запуском компилятора я наконец то разгребся. :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.05.2006 (Вт) 22:19

AjaxVS писал(а):Во-вторых, почему не будет работать? Че, апечятался где то? У меня работает. И я очень доволен результатами.

А ты подумай.
Подсказка: перенаправлениями занимается командная оболочка, а не сам Windows.
Lasciate ogni speranza, voi ch'entrate.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 09.05.2006 (Вт) 23:51

И...?
Твой довод полагается на что-то типа "а вдруг нельзя запустить командную оболочку?" или как? Не помойму..

Открой справочник по Винде и найди "перенаправление вывода". 100% там будет сказано: " > ".

И в 99.99% случаях на WinXP все будет работать идеально.. Ни у меня, ни у кого из моих знакомых никогда не было проблем с перенаправлением в файл.. Для меня это немало значит.

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

Сообщение GSerg » 10.05.2006 (Ср) 3:59

AjaxVS смишной. (c) d3drm
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.05.2006 (Ср) 7:52

Подсказка 2.
Сравни Shell "ping > c:\buff" и Shell "cmd /c ping > c:\buff".
Lasciate ogni speranza, voi ch'entrate.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 10.05.2006 (Ср) 22:20

2 CSerg:
Грубость - это нормально (c) CSerg


2 Alibek:
Сравни "ping > 1.txt" и "format d:"

А если серьезно, команды
cmd /c "php.exe qs.php > output.txt"
и
php.exe qs.php > output.txt
дают абсолютно идентичный результат. Не, ну если у вас какие-то оригинальные настройки типа эмуляции cmd в Линухе, то может быть.. не спорю.. В стандартном случае - все нормально.

ЗЫ. Трудно просто сказать - почему ты считаешь, что " exe > txt" не работает? Зачем этот выпендреж?

След.

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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 32

    TopList  
cron