Как сделать так, чтобы кнопка загружала exe файл?

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

Как сделать так, чтобы кнопка загружала exe файл?

Сообщение Decaz » 23.11.2004 (Вт) 18:16

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

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 23.11.2004 (Вт) 18:27

Загружала куда? :o

Если надо запустить файл, то воспользуйся этим кодом:

Код: Выделить всё
Private Sub cmdRun_Click()
On Error Resume Next
    Dim sPath As String
    sPath = App.Path
    If Right(sPath, 1) <> "\" Then
        sPath = sPath & "\"
    End If
    Shell sPath & "<имя exe-файла>.exe", _
    vbNormalFocus
End Sub
Моду создают модоки, а распространяют модозвоны.

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 23.11.2004 (Вт) 20:07

Private Sub Command1_Click()
Shell ("q.exe")
End Sub
by_pissed

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 23.11.2004 (Вт) 20:59

i'm pissed писал(а):Private Sub Command1_Click()
Shell ("q.exe")
End Sub


Твой код приведет к ошибке, если текущая папка - не папка с программой.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 23.11.2004 (Вт) 23:23

Господа, да вы что!
Естественно xolod прав.
Боже мой использовать vb-шный Shell.
Попробуйте через него запустить более или менее серьёзный проект, типа фотошопа или офиса.
ИМХО, использовать для запуска только API-шный ShellExecute.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 24.11.2004 (Ср) 6:31

Не знаю, у меня все прекрасно запускалось. И с параметрами и с открытием документов. Может быть просто в руках, которые это запускают, дело????

А изменить текущую папку на папку с программой можно простой строчкой:
ChDir App.Path
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 24.11.2004 (Ср) 10:21

Может быть и в руках, но скорее в том, что вы вероятно мало чего проверяли на Shell.
Попробуйте еще раз.
Только, что запускал несколько игр через shell.
Вылетают и матерятся.
ChDir естественно не помог.
Так, что получше изучите свои руки...

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 24.11.2004 (Ср) 11:47

2|kerish| - код в студию.
Вот это отработало абсолютно корректно:
Код: Выделить всё
Dim sArray(7) As String
Dim j As Integer

sArray(0) = "C:\Program Files\Microsoft Office\Office\EXCEL.EXE"
sArray(1) = "C:\Program Files\Microsoft Office\Office\FRONTPG.EXE"
sArray(2) = "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE"
sArray(3) = "C:\Program Files\Microsoft Office\Office\POWERPNT.EXE"
sArray(4) = "C:\Program Files\Microsoft Office\Office\WINWORD.EXE"
sArray(5) = "C:\Program Files\DrWeb\drweb32w.exe"
sArray(6) = "C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE"

For j = 0 To 6
  Shell (sArray(j))
Next

Список можно продолжить.
А какие игры ты запускал? Не те ли, которые ресурсы на монопольный доступ блокируют?

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 24.11.2004 (Ср) 15:06

имхо Shell - обертка для ShellExecute. Опять же имхо, непосредственный доступ к ShellExecute предпочтительней, чем через посредников в лице msvbvm. Ибо я и сам как-нить без вирт.машины разберусь, кого, как, откуда и с какими параметрами запустить.

Пользовался Shell'ом, пока не обжёгся, что тот же WINWORD.EXE на клиентской машине через Shell не запускается. После этого и стал использовать исключительно ShellExecute.

А вообще это на любителя: можно есть мороженое прям с обёрткой, а можно вытащить из обёртки. У обоих способов есть минусы: в первом случае можно получить несварение желудка, во втором случае до мороженого добираться дольше :)

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.11.2004 (Ср) 18:48

Если уж говорить о том, что лучше использовать(но не легче!)
то самый мощный инструмент - CreateProcess.
Правда, в VB я с ним не работал, только в С++, но врядли разница большая...... Кстати, раз уж такая тема - какая функция в ВБ эквивалентна сишной sizeof? А то в CreateProcess надо передавать sizeof() кое-каких структур......

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.11.2004 (Ср) 18:50

Код: Выделить всё
Len



А где это в CreateProcess надо передавать размеры структур? :-?
Изображение

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.11.2004 (Ср) 19:04

Простите, спутал :oops:

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 24.11.2004 (Ср) 19:06

Там не размер передавать надо, но предпоследний параметр - указатель на STARTUPINFO.
Там одно из полей, кажется, .cb - размер этой структуры...

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

Сообщение alibek » 25.11.2004 (Чт) 10:34

Думается мне, что правильнее LenB использовать, если в структуре строки есть (и используется W-функции).
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 25.11.2004 (Чт) 10:43

Юзлес... VB всё равно сконвертирует перед передачей, так что ещё и переполнение буфера возникнет :)

Если len<>lenb, то нужно, в общем случае, использовать самописные процедуры упаковки. На эти грабли я наступал :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

klop086
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 30.01.2004 (Пт) 8:46
Откуда: Москва

Сообщение klop086 » 25.11.2004 (Чт) 19:35

Да вы шо все? shell ваще почти всегда не работает! Надо Api WinExec использовать. Кстати - она же и любой документ откроет (в сочетании с другой APi, названия не помню, которая возвращает чем по умолчанию открывается тот или иной документ).
Shell Must Die

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.11.2004 (Чт) 19:39

Да вы шо все? Приведите пример, когда Shell не работает - тогда ваши возмущения будут хоть как-то обоснованы.
Изображение

klop086
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 30.01.2004 (Пт) 8:46
Откуда: Москва

Сообщение klop086 » 26.11.2004 (Пт) 19:40

tyomich - напиши простейшую прогу, которая запускала бы выбранный тобой файл ехе через shell - и поппробуй запусти какой-нить ворд или ещё чего (просто не помню на чём у меня не срабатывал).
Сначала подумай, потом помолчи.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 26.11.2004 (Пт) 19:55

Вот и я что-то не припомню, чтобы он у меня хоть раз не сработал...

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 26.11.2004 (Пт) 20:14

Shell, упрощенный вариант ShellExecute, в остальном все отлично работает! И не надо "Да вы шо все? shell ваще почти всегда не работает!". Прямые_руки.drv всех спасет :wink:

зы: примерчик для использования Shell :lol:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 27.11.2004 (Сб) 5:14

Shell как сказал tyomitch
Приведите пример, когда Shell не работает
Shell работает всегда просто Shell это как бы ShellExecute , упрощенный вариант в каьором стоят пораметра с запуском ехе файлов , тоесть с ехе файлами работает норм а вот увас Shell видимо вылетал при попытке запустить *.txt - и правильно чтоб такого рода фаилы запускать на до уже полную от Shellа функцию юзать , тоесть ShellExecute ! Вроде все ! Вот вся пречина безпокоиств !

:wink:
Max!

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 27.11.2004 (Сб) 9:29

Проверил только, что на чём мог.
Quake3 выдет ошибку при запуске через Shell.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.11.2004 (Сб) 10:11

xolod писал(а):Прямые_руки.drv всех спасет :wink:

Именно так.
Код: Выделить всё
ChDrive "f"
ChDir "f:\GAMES\Q3"
Shell "f:\GAMES\Q3\quake3.exe"
- работает.
Изображение

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 27.11.2004 (Сб) 15:03

klop086 писал(а):Да вы шо все? shell ваще почти всегда не работает! Надо Api WinExec использовать. Кстати - она же и любой документ откроет (в сочетании с другой APi, названия не помню, которая возвращает чем по умолчанию открывается тот или иной документ).
Shell Must Die

Нихера подобного SHELL рулит!!!
by_pissed

klop086
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 30.01.2004 (Пт) 8:46
Откуда: Москва

Сообщение klop086 » 29.11.2004 (Пн) 20:06

Использовать Shell это всё равно что работать в Лексиконе, когда Word XP установлен и работает. Или работать в 97 Windows, при живом и работающем том же самом XP. Могу примеров привести дофига. Если кому-то нравится работать с кастрированной функцией, флаг вам в руки. Лично я всегда WinExec использую. Зато - никаких error-ов и т.д. И не надо ни чё переставлять (chdrive\chdir - кстати - я ещё не проверил работает оно или нет!).
| Your Choice Is Your Choice |

Decaz
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 30.09.2004 (Чт) 19:43
Откуда: Москва

Сообщение Decaz » 01.12.2004 (Ср) 16:49

i'm pissed писал(а):Private Sub Command1_Click()
Shell ("q.exe")
End Sub

Не, а кстати работает и я ничего в этом коде плохого не вижу...


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

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

Сейчас этот форум просматривают: The trick, Yandex-бот и гости: 18

    TopList