Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

Может не в тему, но все же...   Найти похожие ветки 

 
Бульбаш   (2002-10-22 13:07) [0]

Возникла проблема обновления версий. Написал софт и его неожиданно для меня начали пользовать большое количество юзверей нашей сетки. Механизма обновления не предусмотрел и сейчас проблемы. Экзешники лежат на разных серверах. Хочу чтобы прога сравнивала версию на моем сервере со своей и переписывала ехе с моего ресурса при необходимости. Готовых решений не требую, подскажите в каком направлении двигаться, где искать примеры...


 
Rouse_   (2002-10-22 13:11) [1]

Я это делаю так, пишется небольшая программа, можно на API или на KOL чтоб не занимала много места,которая и занимается обновлениями.
Ресурс откуда сливается обновление конечно должен быть доступен, и проверка ведется по версии программы как обычного файла, только путь заменяется на сетевой

Желаю успехов


 
Max Zyuzin   (2002-10-22 13:23) [2]

>Бульбаш © (22.10.02 13:07)
Недвано делал именно то, что тебе надо... Делается так...
Написал програмулину, которую засунул всем пользователям по дефаулту в профиль, на старт.
Программа (П1) запускается, ищет ini файл программы, которую надо обнавлять (П2) берет из него версию, если она не совпадает с той версией П1, то перезаписываем поверху... П2 и ini... ну в общем все что тебе нужно и живем припеваючи :) если надо могу намылить.


 
3JIA9I CyKA   (2002-10-22 13:27) [3]

Версию можно взять и из exe-шника


 
Бульбаш   (2002-10-22 14:46) [4]

To Max - не откажусь глянуть примерчик, а ведь действительно версию можно взять и из ехе. А возможно ли реализовать этот механизм непосредственно в одном рабочем ехе-шнике???


 
Sergey13   (2002-10-23 09:36) [5]

2Бульбаш © (22.10.02 13:07)
Уже давно и успешно использую для этого
http://polesoft.narod.ru/Products/Starter/starter.html
Нареканий нет. Просто и быстро.


 
perov   (2002-10-23 17:04) [6]

функция использует библиотеку RXLib
function CheckNewVersion(Path: String): Boolean;
var
F: TextFile;
FileName: String;
BatName: String;
begin
Result:= False;
FileName:= IncludeTrailingBackslash(Path)+ExtractFileName(ParamStr(0));
if FileExists(FileName) then
if GetFileVersion(ParamStr(0)) < GetFileVersion(FileName) then
if CopyFile(PChar(FileName), PChar(ChangeFileExt(ParamStr(0), ".new")), False) then
begin
BatName:= ChangeFileExt(ParamStr(0), ".bat");
AssignFile(F, BatName);
ReWrite(F);
Writeln(F, "@echo off");
Writeln(F, ":dodel");
Writeln(F, "del ""+ParamStr(0)+"" > nul");
Writeln(F, "if exist ""+ParamStr(0)+"" goto dodel");
Writeln(F, "ren "+ChangeFileExt(ParamStr(0), ".new")+" "+ExtractFileName(ParamStr(0))+" > nul");
Writeln(F, "start "+ParamStr(0)+" > nul");
Writeln(F, "del "+BatName+" > nul");
Writeln(F, "exit");
CloseFile(F);
ShellExecute(0, nil, PChar(BatName), nil, nil, SW_HIDE);
Result:= True;
end;
end;


вызов в начале проекта
if CheckNewVersion("u:\pf") then Halt;


 
Бульбаш   (2002-10-28 16:31) [7]

Инстальнул RXLib согласно ридмику, но делфа насколько я понял не видит dcu-файлов, не воспринимает функции. В палитре компонентов RXLib присутствует, при попытке размещения на форме любого компонента ошибка. Подскажите где рыть, возможно надо прописать где-то путь к библиотекам???


 
JohnnyJ   (2002-10-28 18:00) [8]

А почему не положить эту популярную программку на один сервак в единственном экземпляре? И нехай её все используют с одного места.
Появилась новая версия, положил exe-шник на сервак и никакой головной боли. Я сделал именно так, никаких проблем нет.


 
Бульбаш   (2002-10-30 10:40) [9]

Вся проблема в том, что его постоянно используют и если мне необходимо обновить ехе, надо ходить и всех выгонять, а если они не в моей конторе???
Попробовал стартер предложенный "Sergey13", не пойму как насторить, пишет: Inserting нужный файл, затем загружает его, а сам ехе не обновляет. В чем тонкость???
В функции предложенной "perov", делфа не хочет узнавать GetFileVersion, проверил модуль RXVerInf - все присутствует, в хелпе по RX этой функции тоже нет. ??????


 
Sergey13   (2002-10-30 11:17) [10]

2Бульбаш © (30.10.02 10:40)
Странно, там все достаточно доходчиво, ИМХО, написано как делать. С примерами. Ну если хочешь, вот тебе для примера мой рабочий файл teh.ini
---------------------------------------------
[Options]
;--- window header text
WinHeader = Обновление версии программы

;--- start program after update
Run = Tehnolog.exe

;--- path to new files
SourcePath = \\NTSERVER\COMMON\Технолог

SectionOrder = U

[Update]
ItemOrder = F
File1 = tehnolog.exe
File2 = *.frf
File3 = *.doc
File4 = *.hlp
File5 = *.cnt
----------------------------------------------
В командной строке (в ярлыке) пишешь (для моего примера) не

c:\Program Files\tvojaproga\tehnolog.exe

а

"c:\Program Files\tvojaproga\psstartlite.exe" teh.ini

И все.


 
Max Zyuzin   (2002-10-30 11:19) [11]

>Бульбаш © (30.10.02 10:40)
А то что я вам отправлял вы смотрели?


 
Бульбаш   (2002-10-30 12:09) [12]

To Sergey13. Действительно нет ничего лучше хорошего примера, я неправильно понял назначение секций, думал прога сама выбирает I или U. Очень много лишних функций, поэтому не увидел нужную секцию. Теперь все работает, спасибо.
TO Max. Смотрел вашу прогу, но у меня чего-то не работало, а инета не было, чтобы вопрос задать. Сегодня вернусь к этому примеру, так как код для меня представляет интерес.


 
EternalWonderer   (2002-10-30 17:38) [13]

По мне значительно интересней другой вариант, уже предложенный кем-то на этом форуме раньше: при старте программа сравнивает даты создания всех используемых файлов с "серверными", при этом копирует более новые на локальный диск. Проблема самозамены решается элементарно: (1)программа копирует в числе прочих файлов и себя (т.е. .exe) с сервера в свой каталог с любым другим расширением, (2) запускает upgrader.exe с двумя параметрами - старым и новым файлом и делает Halt. (3) Upgrader молча стирает старый файл и изменяет расширение на .exe у нового, после чего (4) запускает его на выполнение.

Если кого заинтересует, вот код Upgrader"a (спасибо неизвестному автору):


program upgrader;
uses Windows;
var Msg: TMsg;
begin
// ParamStr(1): Exe-name of application
// ParamStr(2): Location of .tmp (downloaded file)
if ParamCount <> 2 then Exit;
repeat
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
until DeleteFile(PChar(ParamStr(1)));

MoveFile(PChar(ParamStr(2)),PChar(ParamStr(1)));
DeleteFile(PChar(ParamStr(2)));
WinExec(PChar(ParamStr(1)), sw_ShowNA);
end.

обращаю внимание - параметры Upgrader"у надо передавать В ДВОЙНЫХ КАВЫЧКАХ, либо использовать DOS имена файлов.


 
perov   (2002-10-31 06:32) [14]

function GetFileVersion(FileName: String): Int64;
var
InfoSize, Tmp: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
begin
Result := 0;
InfoSize := GetFileVersionInfoSize(PChar(FileName), Tmp);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Tmp, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, "\", Pointer(FI), VerSize) then
begin
Int64Rec(Result).Hi := FI.dwFileVersionMS;
Int64Rec(Result).Lo := FI.dwFileVersionLS;
end;
finally
FreeMem(VerBuf);
end;
end;
end;

RxLib в даном случае не нужен...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
1-69431
Part
2002-11-11 11:56
2002.11.21
Почему этот код не работает ?!!! Помогите!!!плиз


1-69288
Michael_M
2002-11-11 18:43
2002.11.21
Как правельно передать аргумент?


1-69335
Дмитрий Баранов
2002-11-11 15:28
2002.11.21
Подключение к событиям IE


1-69340
Новенький в Делфи
2002-11-12 19:52
2002.11.21
StringList1.LoadFromStream(MemoryStream1) - проблема


7-69602
antonioxxx
2002-09-13 23:35
2002.11.21
Где установлен Windows?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский