:: Visual Foxpro, Foxpro for DOS
Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
Здравствуйте! Помогите пожалуйста, решить следующую задачу.
Из первой программы "dogovor.exe" я запускаю вторую программу "update_dogovor.exe"
Необходимо из второй программы "update_dogovor.exe" закрыть первую программу "dogovor.exe".
В первой программе "dogovor.exe" обращение к Б.Д. на этом этапе нет.
Обе программы находятся в одной папке.
Спасибо за Ваше время.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Сделать можно, но зачем усложнять?
Dogovor запускает update и сама закрывается.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
Может Вы и правы, но мне нужно именно так как я описал.
Если Вас не затруднит напишите как закрыть "dogovor.exe"
Спасибо за помощь
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Sergievsky

Сообщений: 133
Дата регистрации: 24.10.2000
Делал сервис для принудительного закрытия программы у пользователей. Пользовательская программа по таймеру смотрела наличие файлика в определенном месте и инициировала штатное поочередное закрытие текущих форм вместе с главной. Чтобы всех выкинуть из задачи и не пускать достаточно было создать файлик. Главное не забыть его стереть потом.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
- прога 1 запускает прогу 2 (не ожидая ее завершения RUN, ShellExecute), после этого прога 1 завершается (QUIT)
- прога 2 находит файл проги 1 и делает попытки удаления файла проги1 (TRY ... DELETE FILE (прога 1)... ENDTRY, проверяем удаленность FILE(прога 1))
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
**--Вот мой модуль
IF FILE(ALLTRIM(rek_cotr.path_upd) + 'dogovor.exe')
*** Проверим версию на ПК пользователя
Pver_1 = AGETFILEVERSION(ArrayVersion_1, pat1+"\dogovor.exe")
*** Проверим версию на сервере
Pver_2 = AGETFILEVERSION(ArrayVersion_2, ALLTRIM(rek_cotr.path_upd)+"dogovor.exe")

IF ArrayVersion_1[11] == ArrayVersion_2[11] && Если версии не совпадают
ELSE
= MESSAGEBOX('Необходимо обновить программу ',48,'Проверка')
**-- ВОТ ЗДЕСЬ МНЕ НУЖНА ВАША ПОМОЩЬ
**-- У меня сейчас вот так

Pzapusk = 'update_dogovor.exe'
RUN &Pzapusk
**-- программа запускает 'update_dogovor.exe' но как мне добраться до следующий строки ?
ThisForm.Command3.Click && По кнопке выхода из программы

ENDIF

ENDIF
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> но как мне добраться до следующий строки ?
Попробуй
RUN /N &Pzapusk
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
Спасибо of63 Вы мне помогли
Спасибо всем за помощь
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
Я использовал
_SHELL = "DO update_dogovor.exe"
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
tim59
Спасибо всем за помощь
Не хотите проблем, переделайте, пока в начале пути.
Потом сложнее будет.
Taran
Сделать можно, но зачем усложнять?
Dogovor запускает update и сама закрывается.
Прислушайтесь!
Запускаете прогу обновлятор, она проверяет обновление, и если есть, качает и запускает основную, если нет, сразу запускает основную.
Все. Никаких танцев с бубном.

В общем, каждый сам волен выкопать себе могилу.
PS Причем основная может смотреть, не надо ли обновить "обновлятор"
Так они друг друга и обновляют)))


------------------




Исправлено 1 раз(а). Последнее : Аспид, 18.01.18 08:34
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
dfr

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
У меня оказалось проще все проверки на новые версии и их скачивание засунуть в основную прогу. Которая запускается всегда первой.
Если удалось скачать более новую прогу (в отдельный каталог), то запускается батник обновления, а сама прога закрывается.

В батнике типа такое:

echo off
copy прога.exe .\update\прога.exe_old /y
:begin
copy .\update\прога.exe прога.exe /y
if %ERRORLEVEL% EQU 0 goto exit
ping 127.0.0.1 -n 3 > nul
goto begin
:exit
start прога.exe NOUPDATE

Там цикл на попытку перезаписи проги, пока та пытается закрыться. Пинг в качестве задержки.
Батник можно создавать самой прогой.

С параметром NOUPDATE прога не проверяет обновления (после перезапуска).



Исправлено 1 раз(а). Последнее : dfr, 18.01.18 09:01
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Сейчас есть задержка в батниках - TIMEOUT 1 - задержка 1 сек
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
tim59
Автор

Сообщений: 18
Дата регистрации: 21.04.2011
Спасибо всем кто отозвался.
Решение найдено, Вы мне помогли.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Taran

Сообщений: 13625
Откуда: Красноярск
Дата регистрации: 16.01.2008
Вот честно говоря не могу придумать зачем использовать батник.
Вроде как update.exe вполне может справиться со всеми задачами копирования и обновления.
Да и проще для фокспро`шника.
Опять же адекватная форма с индикацией процесса и, при необходимости, предупреждение о необходимости закрытия основной программы и пр..
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Прога же не может сама себя уничтожить (или заменить), надо сторонний процесс. Вот батник и есть сторонний процесс, или update.exe... Можно саму себя скопировать рядом и запустить с ключем UPDATE, чтобы не держать 2 проекта, только опять не забыть уничтожать себя после использования (или в TMP пусть валяется неудаленная)... 100 путей сделать правильно.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Taran
Вот честно говоря не могу придумать зачем использовать батник.
Просто чтобы не писать программу-обновлятор update.exe
Taran
Вроде как update.exe вполне может справиться со всеми задачами копирования и обновления.
Дв, конечно. Но её надо написать
В зависимости от структуры основной программы (это же совсем не обязательно один exe и всё), может потребоваться более широкая логика - не тупо скопировать один exe и привет. И тогда с одной стороны фокс-прога будет лучше (т.к. там то проще сложную логику писать нежели в cmd скрипте - хотя в современных ОС вместо старых добрых cmd-батников уже можно применять powershell скрипты - а они на порядок "мощнее"). Но с другой стороны она будет и сложнее - скажем если меняется список файлов для обновления, или требуется запуск вспомогательных exe для, к примеру, обновления БД, установки новых ocx, инсталляции/деинсталляции дополнительного софта. Т.е. написание такого сложного и универсального update.exe потребует весьма больших усилий.

P.S. Для целей простого обновления не требуется закрывать основную программу "извне" (из update.exe) - т.к. она сама может себя закрыть, при том наиболее корректным способом. Но бывают ситуации когда это всё же необходимо (например для сетевой программы требуется "выгнать всех" чтобы изменить структуру БД, или банально выполнить переиндексацию/починку, если будет обнаружена порча файлов БД). Вот тут то как раз и пригодится таймер в основной программе, который следит, к примеру, за наличием специального файла-флага - увидел файл - известил пользователя и закрыл программу (можно не сразу, а дав пользователю несколько минут для завершения текущей работы).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Куча программ обновляется налету, без перезапуска.
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Обновляют и сам экзешник и в памяти заменяются, без перезапуска проги?
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
хз
Ratings: 0 negative/0 positive
Re: Закрыть запущенную программу
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Без перезапуска не обновляются - но его вполне можно сделать "незаметным". Запомнил все данные и состояние, после перезапуска восстановил. Теоретически нет проблем. Практически, конечно, прилично геморроя.
Даже ядра ОС вполне себе без ребутов обновляются en.wikipedia.org


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика