Форум: "Базы";
Текущий архив: 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