for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Обновление версии программки
novik
Автор

Сообщений: 68
Дата: 16.05.22 09:04:21
Уважаемые знатоки!

Подскажите можно ли в vfp(9) запускать исполняемый файл, после завершения программы,
(когда уже сам ехе-шник программы "отпущен" ... )
Чтобы можно было его (ехе-шник) заменить, в плане обновления версии ...
Подскажите если кто практиковал такое ...
========================================
С уважением!
Ratings: 0 negative/0 positive

Re: Обновление версии программки
Перминов Игорь

Сообщений: 1589
Откуда: Красная Орловка
Дата: 16.05.22 09:46:07
Я так понял, что из основной программы нужно запустить нечто, что обновляет основную программу. Так можно сделать:
Проверка должна производиться в начале основной программы до загрузки таблиц, определения переменных, ну и прочего гем...
  
  if (update)  
     shelexecute(null,"update.exe")    && Не помню параметры  
     QUIT  
  endif


------------------
Без коментариев..




Исправлено: Перминов Игорь, 16.05.22 09:47
Ratings: 0 negative/0 positive

Re: Обновление версии программки
ssa

Сообщений: 12807
Откуда: Москва
Дата: 16.05.22 09:47:25
novik
Уважаемые знатоки!
Подскажите можно ли в vfp(9) запускать исполняемый файл, после завершения программы,
1.Какой программы? 2. А как завершившиеся программы влияют на запуск исполняемых файлов?
Цитата:
(когда уже сам ехе-шник программы "отпущен" ... )
Это когда?
Цитата:
Чтобы можно было его (ехе-шник) заменить, в плане обновления версии ...
Подскажите если кто практиковал такое ...
Какое такое?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive

Re: Обновление версии программки
novik
Автор

Сообщений: 68
Дата: 16.05.22 10:17:37
ssa
1.Какой программы?

Имеется в виду программа написанная скомпилированная в vfp(9)

ssa
А как завершившиеся программы влияют на запуск исполняемых файлов?

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

ssa
Какое такое?

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

(Я извиняюсь если мои вопросы коряво поставлены ...)



Исправлено: novik, 16.05.22 10:18
Ratings: 0 negative/0 positive

Re: Обновление версии программки
novik
Автор

Сообщений: 68
Дата: 16.05.22 10:22:09
Понятно, что просто запустить любой исполняемый файлик из фоксовской программы не проблема ...
Проблема чтобы фоксовская программа уже была завершена и выгружена из памяти.
Т.е. чтобы её ехе-шник был свободен для изменений.
Ratings: 0 negative/0 positive

Re: Обновление версии программки
Перминов Игорь

Сообщений: 1589
Откуда: Красная Орловка
Дата: 16.05.22 10:33:33
Ну вот Вы не договариваете, приходится клещами вытягивать.
Напишите ЧТО ВЫ ХОТИТЕ СДЕЛАТЬ с программой: изменить, удалить, переписать.
Как сделать - я написал.
Ежу понятно, что пока приложение не закроется, ничего с ним сделать нельзя. Придется ждать когда оно будет полностью выгружено из памяти.
Как ждать: в циле, например, переименовываете в my_prog.exe.bac
  
  if file("my_prog.exe.bac")  
     * все приложение выгружено  
  else  
     * дальше ждем  
  endif
Конечно ждать до бесконечности нет смысла.


------------------
Без коментариев..
Ratings: 0 negative/0 positive

Re: Обновление версии программки
1793

Сообщений: 289
Откуда: Озерск
Дата: 16.05.22 14:28:58
проверять лучше при запуске
сваять запускающую прогу Start.exe
-----------------------------
If Agetfileversion(aVerS,FileExeOld)>0 And Agetfileversion(aVerD,FileExeNew)>0
If aVerD(4) # aVerS(4)
копируем FileExeNew в FileExeOld
Endif

запуск FileExeOld
Ratings: 0 negative/2 positive

Re: Обновление версии программки
PaulWist

Сообщений: 14093
Дата: 16.05.22 14:57:41
копируем FileExeNew в FileExeOld

И тут оказывается, что запущено ещё 5 экземпляров проги


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
Vladimir Sklyar

Сообщений: 1390
Дата: 16.05.22 15:08:05
1793
проверять лучше при запуске
сваять запускающую прогу Start.exe
-----------------------------
If Agetfileversion(aVerS,FileExeOld)>0 And Agetfileversion(aVerD,FileExeNew)>0
If aVerD(4) # aVerS(4)
копируем FileExeNew в FileExeOld
Endif

запуск FileExeOld

принцип тот же, когда компилирую прогу ехе-шнмк обзываю по опр. маске, например MyProgXXXX.exe (где ХХХХ - какое-то число), таких файлов в каталоге может быть несколько

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


------------------
С уважением Владимир.
Ratings: 0 negative/0 positive

Re: Обновление версии программки
1793

Сообщений: 289
Откуда: Озерск
Дата: 16.05.22 16:16:03
PaulWist
копируем FileExeNew в FileExeOld
И тут оказывается, что запущено ещё 5 экземпляров проги
Дык незапуск нескольких экземпляров решается в том же Start.exe
Ratings: 0 negative/0 positive

Re: Обновление версии программки
sphinx

Сообщений: 30055
Откуда: Каменск-Уральски
Дата: 16.05.22 16:16:05
PaulWist
копируем FileExeNew в FileExeOld

И тут оказывается, что запущено ещё 5 экземпляров проги

А по мьютексу сложно проверить, запущено ли приложение?


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
sphinx

Сообщений: 30055
Откуда: Каменск-Уральски
Дата: 16.05.22 16:23:11
У нас обновление было организовано так (не стал ничего менять):

1. На сервере создаётся папка с программой, например TEST
2. В неё помещается последняя версия программы, предыдущие на всякий случай переименовываются.
3. У пользователя создаётся bat-файл, в котором прописано копирование ЕХЕ-файла в локальный каталог и запуск этого скопированного файла.

Разумеется, запуск из ЕХЕ-файла гибче, там можно и проверки и ещё чего много сделать, но на практике ещё не было трудностей.


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
PaulWist

Сообщений: 14093
Дата: 16.05.22 16:32:57
1793
Дык незапуск нескольких экземпляров решается в том же Start.exe

Это как, у тебя запущено 5 экземпляров проги, запускаешь шестой через start.exe, что он должен сделать с предыдущими, срубить все 5 предыдущих?



------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
1793

Сообщений: 289
Откуда: Озерск
Дата: 16.05.22 16:41:01
PaulWist
1793
Дык незапуск нескольких экземпляров решается в том же Start.exe

Это как, у тебя запущено 5 экземпляров проги, запускаешь шестой через start.exe, что он должен сделать с предыдущими, срубить все 5 предыдущих?


Start.exe НЕ запускает прогу если она УЖЕ запущена
Ratings: 0 negative/0 positive

Re: Обновление версии программки
sphinx

Сообщений: 30055
Откуда: Каменск-Уральски
Дата: 16.05.22 18:30:19
1793
PaulWist
1793
Дык незапуск нескольких экземпляров решается в том же Start.exe

Это как, у тебя запущено 5 экземпляров проги, запускаешь шестой через start.exe, что он должен сделать с предыдущими, срубить все 5 предыдущих?


Start.exe НЕ запускает прогу если она УЖЕ запущена

+1024. Про мьютекс я писал еще в 2007, правда Равиль на Девконе пытался оспорить за терминальную сессию. А потом Володя Максимов и этот вопрос закрыл, подробности не помню, типа параметры нужные. Все есть здесь, на форуме, если поискать.


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку"..."(с)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
Владимир Максимов

Сообщений: 13944
Откуда: Москва
Дата: 16.05.22 23:11:00
novik
Уважаемые знатоки!
Подскажите можно ли в vfp(9) запускать исполняемый файл, после завершения программы,
(когда уже сам ехе-шник программы "отпущен" ... )
Чтобы можно было его (ехе-шник) заменить, в плане обновления версии ...
Подскажите если кто практиковал такое ...
========================================
С уважением!

В том виде, как Вы описали, проблему не решить. Но данную задачу решают по другому. Намеки Вам уже набросали. В общем случае это делается примерно так

  
 ************  
 * Start.app - программа "стартер".   
 * Запускающая программа, цель которой проверить актуальность версии и, если необходимо и возможно,   
 * выполнить обновление версии  
 ************  
    
  if "Версия Work.app не последняя"  
     * Обновить версию Work.app  
  enfif  
    
 * Запустить текущую версию Work.app  
    
 * Завершить Start.app  

Почему Start.app - это именно приложение, а не, скажем, просто командный файл, где "в лоб" копируют файл из общей папки? По той причине, что надо будет решить довольно много проблем. Это если говорить "в общем случае". А количество проблем будет непрерывно расти по мере развития рабочего приложения. Того самого Work.app

В целом, Вы сами все поймете когда начнете это делать.
Ratings: 0 negative/2 positive

Re: Обновление версии программки
Taran

Сообщений: 13137
Откуда: Красноярск
Дата: 17.05.22 04:57:56
Суровые тут ребята. Я так не умею.
У меня при старте программа (myApp.exe) всегда знает где лежит корень приложения. В реестре читает или в своей папке файл .ini.
В корне всегда есть файл типа app.ver в котором сказано что надо, в том числе версия БД, версия App и пр..
Если требуется обновление, то ... в этой корневой папке есть файл типа Обновляка.exe.
Его и запускаем с некоторыми параметраметрами. В том числе и сслыка на myApp.exe
И прога закрывается если стартанули обновлялку.
Обновлялка ждет секунду-две и начинает копировать.
При ошибке копирования (запущен второй экземпяляр) вывешивается сообщение "ждать. и пр...".
Если все ок, то обновлялка запускает myapp.EXE полученный как параметр.

От повторных запусков есть в основной программе семафор на апи однозначно идентифицирующий прогу. Я не запрещаю повторный запуск программы, но предупреждаю.
Лет х.з. ...20 чтоли работает.
Ratings: 0 negative/0 positive

Re: Обновление версии программки
DmitryKn

Сообщений: 19
Дата: 17.05.22 11:45:23
Владимир Максимов
...
В том виде, как Вы описали, проблему не решить. Но данную задачу решают по другому. Намеки Вам уже набросали. В общем случае это делается примерно так

  
 ************  
 * Start.app - программа "стартер".   
 * Запускающая программа, цель которой проверить актуальность версии и, если необходимо и возможно,   
 * выполнить обновление версии  
 ************  
    
  if "Версия Work.app не последняя"  
     * Обновить версию Work.app  
  enfif  
    
 * Запустить текущую версию Work.app  
    
 * Завершить Start.app  

Почему Start.app - это именно приложение, а не, скажем, просто командный файл, где "в лоб" копируют файл из общей папки? По той причине, что надо будет решить довольно много проблем. Это если говорить "в общем случае". А количество проблем будет непрерывно расти по мере развития рабочего приложения. Того самого Work.app

В целом, Вы сами все поймете когда начнете это делать.

Вот так организовано обновление:
start.exe запускает копирование основного приложения myproject.app в рабочую папку пользователя (пример). В ini прописываются cPathSystem (папка с основным приложением), cPathWork (рабочая папка пользователя)
  
 * Контроль даты и времени создания стартового модуля  
  WAIT WINDOW 'Пожалуйста ожидайте. Идет анализ основного модуля...' NOWAIT  
    
  gcMainApp = GetIni('SYSTEM','MainApp',goApp.cPathWork+'SETUP.INI')  
  IF FILE(goApp.cPathSystem+gcMainApp) && есть модуль на сервере  
  	IF FILE(goApp.cPathWork+gcMainApp) && есть модуль на сервере  
  		IF ADIR(aSource,goApp.cPathSystem+gcMainApp)>0 AND ADIR(aTarget,goApp.cPathWork+gcMainApp)>0  
  			IF (aSource(3)>aTarget(3)) OR (aSource(3)=aTarget(3) AND (CTOT('01-01-01 '+aSource(4)) > CTOT('01-01-01 '+aTarget(4))))  
  				DO UpgrApp  
  			ENDIF  
  		ENDIF  
  	ELSE  
  		DO UpgrApp  
  	ENDIF  
  	RELEASE aSource,aTarget  
  	DO (gcMainApp)  
  ELSE  
  	=MESSAGEBOX('В системном каталоге нет основного модуля')  
  ENDIF  
  WAIT CLEAR  
    
 **************  
    
  PROCEDURE UpgrApp  
  WAIT WINDOW 'Обновление файлов...' NOWAIT  
  COPY FILE (goApp.cPathSystem + gcMainApp) TO (goApp.cPathWork + gcMainApp)  
  RETURN



Исправлено: DmitryKn, 17.05.22 11:48
Ratings: 0 negative/1 positive

Re: Обновление версии программки
novik
Автор

Сообщений: 68
Дата: 17.05.22 14:46:35
Всем откликнувшимся Большое Человеческое Спасибо!)
Ratings: 0 negative/0 positive

Re: Обновление версии программки
akvvohinc

Сообщений: 3510
Откуда: Москва
Дата: 17.05.22 14:55:37
DmitryKn
aSource(3)>aTarget(3)) OR (aSource(3)=aTarget(3) AND (CTOT('01-01-01 '+aSource(4)) > CTOT('01-01-01 '+aTarget(4)))
А почему не просто сложить реальную дату с реальным временем и один раз сравнить?



Исправлено: akvvohinc, 17.05.22 14:56
Ratings: 0 negative/0 positive



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

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

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