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

Запуск и завершение исполняемого файла

08.03.2018, 11:02. Показов 2499. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Необходимо завершить запушенный процесс. Все, вроде бы просто. Создается новый процесс через vba.interaction.shell, открывается хэндл процесса через OpenProcess, при завершении процесса вызываем GetExitCodeProcess, ExitProcess, CloseHandle. При этом закрывается именно вызывающий parent процесс, но не процесс, хэндл которого указывается в GetExitCodeProcess. Если вместо ExitProcess использовать TerminateProcess, то завершается именно тот поток, хэндл которого указан. Хэндл процесса открывается через OpenProcess с параметром all_access и величиной, возвращаемой функцией shell, которая описывается как task id, но совпадает с id процесса, если смотреть через spy++. В чем может быть проблема? Причем открываемое приложение запускается без дочерних окон, в отличие от запуска через двойной клик по иконке, причем и там и там не используются command-line свитчеры. Такое впечатление, что приложение понимает, что я запускаю его через shell. Поможет ли в этом случае запуск PE через CreateProcess? Спасибо за помощь.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim dblRetval As Double, lngProcessID As Long
dblRetval = VBA.Interaction.Shell("C:\WINDOWS\system32\calc.exe")
lngProcessID = VBA.Conversion.CLng(dblRetval)
lngHProcess = OpenProcess(PROCESS_ALL_ACCESS, 0&, lngProccessID) 
If lngHProcess <> 0 Then
    Call WaitForInputIdle(lngHProcess, 10000&)
End If
Exit Sub
 
Dim lngExitCode As Long
Call GetExitCodeProcess(lngHProcess, lngExitCode)
'Call TerminateProcess(lngHProcess, lngExitCode)   
Call ExitProcess(lngExitCode)
Call basModule.CloseHandle(lngHProcess)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2018, 11:02
Ответы с готовыми решениями:

Как получить имя исполняемого файла?
Что-то у меня не получается получить имя самой программы, которая выполняется. Помогите кто чем может

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

Запуск исполняемого файла
Помогите пожалуйста, есть вот такой код: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

3
Модератор
10050 / 3895 / 884
Регистрация: 22.02.2013
Сообщений: 5,849
Записей в блоге: 79
08.03.2018, 12:15
Лучший ответ Сообщение было отмечено IDK как решение

Решение

Цитата Сообщение от IDK Посмотреть сообщение
ExitProcess
Используется для закрытия текущего процесса, в него не передается хендл процесса.

Цитата Сообщение от IDK Посмотреть сообщение
GetExitCodeProcess
Используется для получение кода завершения процесса хендл которого передан в нее.
Если приложение оконное, нужно просто закрыть все его окна через WM_CLOSE, WM_SYSCOMMAND, EndTask.

Цитата Сообщение от IDK Посмотреть сообщение
Причем открываемое приложение запускается без дочерних окон
Попробуй vbNormalFocus.
1
63 / 48 / 12
Регистрация: 28.12.2014
Сообщений: 270
09.03.2018, 10:23  [ТС]
Используется для закрытия текущего процесса, в него не передается хендл процесса.
Но передается в GetExitCodeProcess, думал, что это имеет значение для ExitProcess.

Если приложение оконное, нужно просто закрыть все его окна через WM_CLOSE, WM_SYSCOMMAND, EndTask.
Приложение оконное, так будет действительно правильнее.

Попробуй vbNormalFocus.
Перебрал все константы перечисления, не помогает. Но CreateProcess имеет параметр lpCurrentDirectory, который задает каталог по умолчанию для запущенного процесса. Процесс, в свою очередь из этого каталога загружает конфигурацию дочерних окон. Так это и сработало, а Shell задавал этот параметр как свой текущий каталог, который в свою очередь не подходил по определенным обстоятельствам.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
12.03.2018, 19:27
Цитата Сообщение от IDK Посмотреть сообщение
а Shell задавал этот параметр как свой текущий каталог
Можешь перед запуском Shell сменить собственный рабочий каталог (ChDir).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2018, 19:27
Помогаю со студенческими работами здесь

Запуск исполняемого файла
кто знает, можете ли вы мне помочь?! мне надо чтобы через паскаль можно было открывать файл(допустим exe файл) uses crt; var a:real; ...

Запуск исполняемого файла
Доброго времени суток! Вопрос конечно глупый, но всё же: Скомпилировал программу в исполняемый файл на Ubuntu 12.10 (комп 1),...

Запуск исполняемого файла
Как из терминала запустить исполняемый файл? Например, файл находится по адресу: /home/noginanton/first Пробовал так: cd...

Запуск исполняемого файла
Как запустить исполняемый exe файл с параметрами в командной строке чтобы исполняемый файл отрабатывал по пути указанному в командной строке

Запуск исполняемого файла из ресурсов
Привет всем! Вот я закинул в ресурсы приложение .exe! Как мне сделать чтобы по нажатию по кнопке оно открывалось из русурсов?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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