Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Alexeyy

Проблема с запуском exe файлов

16.02.2011, 08:46. Показов 2632. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в следующем.......

Я хочу сделать некую форму, которая будет содержать, ну скажем, одну кнопку. И по нажатию на эту кнопку должен запускаться exe файл.
Файл типа exe SFX-архива, либо exe файл программы написаной на VB.

Подскажите пожалуйста програмный код!!!

Зарание спасибо
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2011, 08:46
Ответы с готовыми решениями:

Проблема с запуском документа Word через Shell
Я делаю так: Shell('start.exe winword.exe ' & FILENAME) Проблема же в том, что Word принимает только те файлы, имена которых состоят...

проблема совместимости EXE в winXP, win2000, win98
Скомпилирований файл в WinXP-2000 не идёт на win98 как мне обяснили из за обратной совместимостит, но получилось так что я его...

Упаковка файлов в .EXE
Возможно ли в Visual Basic, при компиляции EXE-шника, упаковывать в него, для дальнейшего использования программой, файлы exe, dll... (как...

11
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 60
18.02.2011, 08:50
Pасширенный вариант функции Shell

Модуль MyModule:
Visual Basic
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option Explicit
Public Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
 
Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
 
Public Declare Function WaitForSingleObject Lib 'kernel32' ( _
ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long
 
Public Declare Function InputIdle Lib 'user32' Alias 'WaitForInputIdle' ( _
ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long
 
Public Declare Function CreateProcessA Lib 'kernel32' ( _
ByVal lpApplicationName As Long, ByVal lpCommandLine As String, _
ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long
 
Public Declare Function GetExitCodeProcess Lib 'kernel32' ( _
ByVal hProcess As Long, lpExitCode As Long) As Long
 
Public Declare Function CloseHandle Lib 'kernel32' ( _
ByVal hObject As Long) As Long
 
Public Const NORMAL_PRIORITY_CLASS As Long = &H20&
Public Const INFINITE As Long = -1&
 
Public Const STATUS_WAIT_0 As Long = &H0
Public Const STATUS_ABANDONED_WAIT_0 As Long = &H80
Public Const STATUS_USER_APC As Long = &HC0
Public Const STATUS_TIMEOUT As Long = &H102
Public Const STATUS_PENDING As Long = &H103
 
Public Const WAIT_FAILED As Long = &HFFFFFFFF
Public Const WAIT_OBJECT_0 As Long = STATUS_WAIT_0
Public Const WAIT_TIMEOUT As Long = STATUS_TIMEOUT
 
Public Const WAIT_ABANDONED As Long = STATUS_ABANDONED_WAIT_0
Public Const WAIT_ABANDONED_0 As Long = STATUS_ABANDONED_WAIT_0
 
Public Const WAIT_IO_COMPLETION As Long = STATUS_USER_APC
Public Const STILL_ACTIVE As Long = STATUS_PENDING
 
Public Const PROCESS_QUERY_INFORMATION As Long = &H400
Public Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
 
 
Public Function myShell(CommandLine As String, Optional Timeout As Long, _
Optional WaitForInputIdle As Boolean) As Boolean
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim i As Integer
Dim ret As Long
Dim nMilliseconds As Long
nMilliseconds = INFINITE
Start.dwFlags = 4 'Если окно не надо показывать=1
'^^^^^^^^^^^^^^
'и вообще насчет вида запуска надо с ней играться
'например 6 дает окно минимального размера
CreateProcessA 0&, CommandLine, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, Start, proc
ret = WaitForSingleObject(proc.hProcess, nMilliseconds)
CloseHandle proc.hProcess
myShell = (ret = WAIT_OBJECT_0)
 
End Function
В модуле формы:
Visual Basic
1
myShell('Имя программы')
P.S. Взято из Vb Help
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
21.02.2011, 14:01
pancer
Спасибо. Я также опробовал и принял на вооружение...работает!!!
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
22.02.2011, 13:44
гм... сорри, не понял, а почему нельзя использовать Shell ?
0
Ghost
22.02.2011, 14:13
Shell хорош, но... CreateProcess иногда бывает удобнее.
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 60
22.02.2011, 20:44
Shell не дожидается окончания работы вызываемого процесса.
Вот и вся причина.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
22.02.2011, 21:57
чего-то я в вопросе не заметил такого условия...
там сказано, что просто нужно запустить программу.
0
Ghost
23.02.2011, 01:19
2 pancer - чтобы не спорить по мелочам - вот код:
Visual Basic
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
Public Function ExecCmdShell(stCmdLine As String, lWait As Integer, Optional bHide As Boolean) As Long
    Dim t1, t2
    Dim hInst As Long, lRet As Long, hwnd As Long
    Dim WinClassBuf As String * 255, WinTitleBuf As String * 255
 
    t1 = Timer
    If (bHide) Then
         hInst = Shell(stCmdLine, vbHide)
    Else
         hInst = Shell(stCmdLine)
    End If
 
    DoEvents
 
    If (lWait <> 0) Then
        hwnd = GetWinHandle(hInst)
        t2 = Timer
 
        lRet = GetWinHandle(hInst)
 
        While ((lRet <> 0) And ((t2 - t1) < lWait))
             lRet = GetWinHandle(hInst)
             t2 = Timer
             Call Delay(1000, True)
        Wend
 
        If (lRet <> 0) Then
            If MsgBox('Не удалось дождаться окончания работы приложения ' & _
                    stCmdLine & ' Завершить принудительно?', vbOKCancel, _
                    'Вопрос') = vbOK _
            Then
                Call PostMessage(hwnd, WM_QUIT, 0, 0&)
            End If
         End If
    End If
 
    ExecCmdShell = hInst
 
End Function
а вдогонку - а что, CreateProcess чего-то ждет? )

2 Spirin - CreateProcess ближе к API, в общем - при любом раскладе - дело вкуса. Лично я несколько лет назад завернул нужные мне вызовы API в OCX и не парюсь с объявлением функций. Кирпичи про необходимость распространения OCX просьба оставить при себе )

При любом раскладе - все 3 метода работают, думаю, что в данном контексте это главное.
Messir
23.02.2011, 11:45
2 Ghost:
1) CreateProcess сам по себе ничего не ждет, ждет WaitForSingleObject, а CreateProcess просто возвращает хэндл того, что ждать нужно
2) А что есть GetWinHandle? Такие вещи, как свои функции, описывать нужно, коль код приводишь.
Ghost
23.02.2011, 13:04
Visual Basic
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Option Compare Database
Option Explicit
 
Public Const SW_HIDE = 0
Public Const SW_NORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Const GW_HWNDNEXT = 2
Private Const WM_QUIT = &H12
 
Public Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type
 
Public Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
 
Public Declare Function SetWindowText& Lib 'user32' Alias 'SetWindowTextA' (ByVal hwnd As Long, ByVal lpString As String)
 
Public Declare Function GetParent Lib 'user32' (ByVal hwnd As Long) As Long
 
Public Declare Function GetWindow Lib 'user32' (ByVal hwnd As Long, _
        ByVal wCmd As Long) As Long
 
Public Declare Function CloseWindow Lib 'user32' (ByVal hwnd As Long) As Boolean
 
Declare Function SetFocusAPI Lib 'user32' Alias 'SetFocus' _
                                 (ByVal hwnd As Long) As Long
 
Declare Function CloseWindowAPI Lib 'user32' Alias 'DestroyWindow' _
                                 (ByVal hwnd As Long) As Long
 
Public Declare Function GetWindowHandle Lib 'user32' (ByVal hwnd As Long) As Long
 
Public Declare Function PostMessage Lib 'user32' Alias 'PostMessageA' _
                    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal _
                    lParam As Long) As Long
 
Private Declare Function CreateProcess Lib 'kernel32' _
   Alias 'CreateProcessA' _
   (ByVal lpApplicationName As String, _
   ByVal lpCommandLine As String, _
   lpProcessAttributes As Any, _
   lpThreadAttributes As Any, _
   ByVal bInheritHandles As Long, _
   ByVal dwCreationFlags As Long, _
   lpEnvironment As Any, _
   ByVal lpCurrentDriectory As String, _
   lpStartupInfo As STARTUPINFO, _
   lpProcessInformation As PROCESS_INFORMATION) As Long
 
Public Declare Function FindWindow Lib 'user32' Alias 'FindWindowA' _
                                    (ByVal lpClassName As String, _
                                    ByVal lpWindowName As String) _
                                    As Long
   
 
Private Declare Function OpenProcess Lib 'kernel32.dll' _
        (ByVal dwAccess As Long, _
        ByVal fInherit As Integer, _
        ByVal hObject As Long) As Long
 
Private Declare Function TerminateProcess Lib 'kernel32' _
        (ByVal hProcess As Long, _
        ByVal uExitCode As Long) As Long
   
Private Declare Function GetExitCodeProcess Lib 'kernel32' _
        (ByVal hProcess As Long, lpExitCode As Long) As Long
 
Private Declare Function CloseHandle Lib 'kernel32' _
        (ByVal hObject As Long) As Long
   
Private Declare Function WaitForSingleObject Lib 'kernel32' (ByVal _
        hHandle As Long, ByVal dwMilliseconds As Long) As Long
Messir
23.02.2011, 17:34
Какой ужас
А если серьезно, то этот вариант более требователен к ресурсам и не дает никакого выигрыша. Так что уж лучше использовать первый предложенный вариант.
З.Ы. Да, кстати, этот метод не сработает, если процесс не создает никаких окон
Ghost
23.02.2011, 23:54
2 Messir - согласен со все сказанным, но! _*на моих задачах*_ этот метод работает 2 раза в сутки минимум на 20 точках более чем 2 года )
а переписывать - лень - работает - 'ничего не изменяй, ничего не трогай' )
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2011, 23:54
Помогаю со студенческими работами здесь

Создание упаковщика exe файлов
Киньте плз работающий исходник упаковщика exe файлов (или хороший материал по теме)

Проблема с запуском приложения .exe
Что делать и как быть? Имеется файл предназначенный для 32х системы и 64х система. Как можно запустить 32-разрядный файл на...

Проблема с открытием .exe файлов!
Люди, скажите пожалуйста, что делать... При открытии любого .exe файла комп выдает окно &quot;Выберите программу для открытия этого...

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

Проблема с русскими именами файлов при архивации их с использованием 7z.exe с помощью батника
Когда в батнике test.cmd чтонить архивируешь с русскими буквами, то 7z выдает вывод в крякозябрах chcp 1251 &quot;C:\Program...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru