root/trunk/default.iss

Revision 161, 23.8 kB (checked in by sagrer, 5 months ago)
  1. Добавлен перевод лицензии на английский. По-видимому перевод более чем кривой, но как умею %).
  2. В чейнджлог вбито все сделанное на данный момент
  3. Добавлена английская версия чейнджлога.
  4. Инсталлятор (который из iss) локализован на русский и английский. Выполнен #45.
  5. Бага #46 в инсталляторе исправлена.
  • Property svnmailer:content-charset set to cp1251
Line 
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;               Это iss-скрипт по умолчанию             ;;
3 ;;               для скармливания IssBuilder.            ;;
4 ;;                                                       ;;
5 ;;           Copyright (C) 2007-2008 Gipat Group         ;;
6 ;;              Распространяется на условиях             ;;
7 ;;                      LGPL v2.1                        ;;
8 ;;                                                       ;;
9 ;;                  www.gipatgroup.org                   ;;
10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
12 ;;К работе над данным файлом приложили руки, ноги.... короче аффтары:
13 ;; 1) Sagrer (sagrer@yandex.ru)
14
15 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16
17 ;; Файл для сборки GGBuildTools
18
19 [Setup]
20 InternalCompressLevel=ultra
21 OutputBaseFilename=GGBuildTools_0_0_0_0
22 SolidCompression=true
23 Compression=lzma/ultra
24 OutputDir=.\
25 SourceDir=.\
26 VersionInfoVersion=0.0.0.0
27 VersionInfoTextVersion=GGBuildTools 0.0.0.0
28 VersionInfoCompany=Gipat Group
29 VersionInfoDescription=GGBuildTools 0.0.0.0
30 ShowLanguageDialog=auto
31 AppName={code:ConstAppName}
32 AppVerName=GGBuildTools 1.0.1.40
33 DefaultDirName={code:ConstInstallPath}
34 UsePreviousAppDir=false
35 DefaultGroupName={code:ConstDeveloperName}\{code:ConstAppName}\
36 DisableStartupPrompt=true
37 FlatComponentsList=true
38 AppendDefaultDirName=false
39 UsePreviousSetupType=false
40 AppCopyright=Copyright © 2007-2008 Gipat Group
41 RestartIfNeededByRun=false
42 WizardImageFile=compiler:wizmodernimage-is.bmp
43 WizardSmallImageFile=compiler:wizmodernsmallimage-is.bmp
44 VersionInfoCopyright=Copyright © 2007-2008 Gipat Group
45 LicenseFile=GG_opened_EI-editor-utility_license_en_ver.txt
46 InfoBeforeFile=ChangeLog_en.txt
47 [_ISTool]
48 UseAbsolutePaths=false
49 [Languages]
50 Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: GG_opened_EI-editor-utility_license.txt; InfoBeforeFile: ChangeLog.txt
51 Name: en; MessagesFile: compiler:Default.isl; LicenseFile: GG_opened_EI-editor-utility_license_en_ver.txt; InfoBeforeFile: ChangeLog_en.txt
52 [Components]
53 Name: CurrVersion_Main; Description: {cm:CurrVersion_Main}; Flags: fixed; Check: CheckDoNewInstall; Types: StandardInstall
54 Name: AlwaysInstall; Description: {cm:AlwaysInstall}; Flags: fixed; Types: StandardInstall
55 [Icons]
56 Name: {group}\readme.txt; Filename: {app}\readme.txt; Components: CurrVersion_Main
57 Name: {group}\{cm:MenuUninstall}; Filename: {uninstallexe}; Components: CurrVersion_Main
58 [Types]
59 Name: StandardInstall; Description: {cm:StandardInstall}; Languages:
60 [Run]
61 Filename: {app}\Installer.exe; Parameters: -s; WorkingDir: {app}; StatusMsg: {cm:RunningAppsInstaller}; Components: AlwaysInstall; Flags: runhidden; Languages:
62 [Registry]
63 Root: HKCU; Subkey: Software\{code:ConstDeveloperName}\{code:ConstAppName}\; Flags: createvalueifdoesntexist uninsdeletekey; Components: AlwaysInstall
64 [UninstallRun]
65 Filename: {app}\UnInstaller.exe; Parameters: -s; WorkingDir: {app}; StatusMsg: {cm:RunningAppsUnInstaller}; Components: AlwaysInstall; Flags: runhidden
66 [CustomMessages]
67 ru.MenuUninstall=Деинсталлировать
68 en.MenuUninstall=Uninstall
69 ru.StandardInstall=Обыкновенная установка
70 en.StandardInstall=Standard installation
71 ru.CurrVersion_Main=Основные файлы полной версии
72 en.CurrVersion_Main=Base files of the full version
73 ru.AlwaysInstall=Обязательные файлы
74 en.AlwaysInstall=Required files
75 ru.PackageVersionInstalled=Версия, содержащаяся в данном пакете (%1) судя по всему уже установлена. Если вы продолжите установку - то по-видимому потребуется деинсталлировать уже установленную версию. Продолжить установку?
76 en.PackageVersionInstalled=Version from this package (%1) is already installed. You must uninstall installed version, if you will continue. Continue installing?
77 ru.InstVerFound=Обнаружена уже установленная версия. Чтобы установить данную версию - надо деинсталлировать уже установленную. Деинсталлятор обнаружен. Запустить деинсталлятор?
78 en.InstVerFound=Installed version found. If you want to install this version - you must uninstall an installed version. Uninstaller is detected. Launch uninstaller?
79 ru.PressOkAfterUninstall=По завершению деинсталляции - нажмите кнопку ОК. НЕ НАЖИМАЙТЕ кнопку Ок до завершения деинсталляции!!!
80 en.PressOkAfterUninstall=Please, press OK after uninstallation is finished. DON'T PRESS OK before uninstallation is finished!!!
81 ru.UninstallFailedByUnknownError=Деинсталляция не выполнена по неизвестной причине. Выполните деинсталляцию вручную, либо вручную удалите каталог %1 после чего запустите эту установку заново.
82 en.UninstallFailedByUnknownError=Uninstall failed with an unknown error. Please, try to launch uninstall manually, or remove %1 directory directly, then launch this installation again.
83 ru.UninstallFailed=Деинсталляция не выполнена. Выполните деинсталляцию вручную, либо вручную удалите каталог %1 после чего запустите эту установку заново.
84 en.UninstallFailed=Uninstall failed. Please, try to launch uninstall manually, or remove %1 directory directly, then launch this installation again.
85 ru.InstalledAndNoUninstaller=Обнаружена уже установленная версия, но деинсталлятор отсутствует. Рекомендуется прекратить установку и вручную удалить каталог %1 после чего запустить эту установку заново. Но вы все-же можете и продолжить процесс установки (это может привести к ошибкам). Продолжить установку?
86 en.InstalledAndNoUninstaller=Installed version found, but no uninstaller for it was detected. It is recommended to stop the installation and to remove %1 directory manually, and then launch this installation again. But you can continue at your's ownrisk (this can give you a lot of different errors). Continue the installation?
87 ru.NothingToUpdate=Инсталлятору не удалось найти на компьютере версий, которые он мог бы обновить. О том, какие версии в принципе могут быть обновлены - см. по имени файла пакета. Данный пакет не предназначен для установки с нуля, им можно только обновить одну из определенных уже установленных версий - поэтому установка отменена.
88 en.NothingToUpdate=Can't find versions, wich can be updated by this package. Look at a file name of an installation package to know what versions can be updated by it. This package can't install anything if no required previous version was already installed - it can only update this old installed version - so installation aborted.
89 ru.InstallingAborted=Установка отменена :(
90 en.InstallingAborted=Installing aborted :(
91 ru.TheStartOfInstallation=Старт установки!
92 en.TheStartOfInstallation=The start of installation!
93 ru.RunningAppsInstaller=Выполнение внешнего Installer.exe приложения
94 en.RunningAppsInstaller=Running application's Installer.exe
95 ru.RunningAppsUnInstaller=Выполнение внешнего UnInstaller.exe приложения
96 en.RunningAppsUnInstaller=Running application's UnInstaller.exe
97 [Code]
98 const
99   AppName = 'GGBuildTools';   //Типа имя апликашона
100   AppVer = '0.0.0.0';
101   NoFullInstall = false;   //Запрет\разрешение полной установки
102   NoUpdate = true;       //Запрет\разрешение апдейта
103   UpdateFrom = '0.0.0.0;0.0.0.1';     //Версии, с которых можно обновлять.
104   DeveloperName = 'Gipat Group';    //Имя девелопера - часть пути в реестре.
105
106 var
107   InstallPath, CurrentVer : string;
108   DoNewInstall, DoUpdate : boolean;
109
110 Function Parse (Str, Separator : string; Var Parsed : string) : string;
111 var
112   I, StrLength : integer;
113 begin
114   //Функа для парсинга строк. Кривая, но как умею :(.
115   I := 0;
116   StrLength := Length(Str);
117   if StrLength > 0 then begin
118     Parsed := '';
119
120     repeat
121       I := I+1;
122       If Str[I] <> Separator then begin
123         //Если сепаратор не встретился - запомнить символ.
124         Parsed := Parsed+Str[I];
125       end;
126     until (I = StrLength) or (Str[I] = Separator);
127
128     Result := Str;
129     Delete(Result,1,I);
130   end
131   else begin
132     Parsed := Str;
133     Result := '';
134   end;
135 end;
136
137 Function IsNumericStr (Str : string) : boolean;
138 var
139   I, StrLength : integer;
140   FindedChar : boolean;
141 begin
142   //А эта функа должна определять, состоит ли строка только из цифр.
143
144   Result := true;  //Умолчальный результат.
145
146   StrLength := Length(Str);
147   If StrLength > 0 then begin
148     //Если в строке чета есть то можно приступать.
149     For I := 1 to StrLength do begin
150       FindedChar := true;
151       If Str[I] = '1' then FindedChar := false;  //Достаточно выполнится 1 проверке - и чар будет не найден :)
152       If Str[I] = '2' then FindedChar := false;
153       If Str[I] = '3' then FindedChar := false;
154       If Str[I] = '4' then FindedChar := false;
155       If Str[I] = '5' then FindedChar := false;
156       If Str[I] = '6' then FindedChar := false;
157       If Str[I] = '7' then FindedChar := false;
158       If Str[I] = '8' then FindedChar := false;
159       If Str[I] = '9' then FindedChar := false;
160       If Str[I] = '0' then FindedChar := false;
161
162       //И если был обнаружен символ-не цифра - обломить все нафиг.
163       If FindedChar = true then Result := false;
164     end;
165   end
166   else begin
167     Result := false;  //Типа строка пустая.
168   end;
169 end;
170
171 Function IsVersionStr (Str : string) : boolean;
172 var
173   I, StrLength : integer;
174   FindedChar, WasPoint : boolean;
175 begin
176   //А эта функа должна определять, состоит ли строка только из цифр.
177
178   Result := true;  //Умолчальный результат.
179
180   StrLength := Length(Str);
181   If StrLength > 0 then begin
182     //Если в строке чета есть то можно приступать.
183     WasPoint := false;
184     For I := 1 to StrLength do begin
185       FindedChar := true;
186       If Str[I] = '1' then begin
187         FindedChar := false;
188         WasPoint := false;
189       end;
190       If Str[I] = '2' then begin
191         FindedChar := false;
192         WasPoint := false;
193       end;
194       If Str[I] = '3' then begin
195         FindedChar := false;
196         WasPoint := false;
197       end;
198       If Str[I] = '4' then begin
199         FindedChar := false;
200         WasPoint := false;
201       end;
202       If Str[I] = '5' then begin
203         FindedChar := false;
204         WasPoint := false;
205       end;
206       If Str[I] = '6' then begin
207         FindedChar := false;
208         WasPoint := false;
209       end;
210       If Str[I] = '7' then begin
211         FindedChar := false;
212         WasPoint := false;
213       end;
214       If Str[I] = '8' then begin
215         FindedChar := false;
216         WasPoint := false;
217       end;
218       If Str[I] = '9' then begin
219         FindedChar := false;
220         WasPoint := false;
221       end;
222       If Str[I] = '0' then begin
223         FindedChar := false;
224         WasPoint := false;
225       end;
226       If Str[I] = '.' then begin
227         FindedChar := false;
228         If WasPoint = true then begin
229           //Если до этого уже была точка - то аблооом.
230           FindedChar := true;
231         end;
232         WasPoint := true;
233       end;
234
235       //И если был обнаружен символ-не цифра и не точка - обломить все нафиг.
236       If FindedChar = true then Result := false;
237     end;
238   end
239   else begin
240     Result := false;  //Типа строка пустая.
241   end;
242 end;
243
244 Function IsNewVersion(InstalledVer, CurrentVer : string) : boolean;
245 var
246   CurrVerLevels, I,
247   InstalledVerLevels, MaxLevel : integer;
248   TempStr, TempStr2,
249   InstalledVerTemp, CurrentVerTemp : string;
250 begin
251   //Функа должна проверять, является ли ентот инсталл более новой версией.
252
253   Result := false;  //Типа умолчальное значение.
254   InstalledVerTemp := InstalledVer;
255   CurrentVerTemp := CurrentVer;
256
257
258   If (IsVersionStr(InstalledVer) = true) and (IsVersionStr(CurrentVer) = true) then begin
259     //Только если в обоих строках - версии.
260
261     //Для начала - посмотреть сколько уровней версии в текущей версии.
262     TempStr := CurrentVerTemp;
263     CurrVerLevels := 1;  //Есть как минимум 1 уровень.
264     repeat
265       If Pos('.',TempStr) <> 0 then begin
266         CurrVerLevels := CurrVerLevels + 1;   //Есть минимум еще 1 уровень.
267         TempStr := Parse(TempStr,'.',TempStr2);
268       end;
269     until Pos('.',TempStr) = 0;
270
271     //И в проинсталенной.
272     TempStr := InstalledVerTemp;
273     InstalledVerLevels := 1;  //Есть как минимум 1 уровень.
274     repeat
275       If Pos('.',TempStr) <> 0 then begin
276         InstalledVerLevels := InstalledVerLevels + 1;   //Есть минимум еще 1 уровень.
277         TempStr := Parse(TempStr,'.',TempStr2);
278       end;
279     until Pos('.',TempStr) = 0;
280
281     //Теперь вычислить максимальный уровень.
282     If CurrVerLevels > InstalledVerLevels then begin
283       MaxLevel := CurrVerLevels;
284     end
285     else begin
286       MaxLevel := InstalledVerLevels;
287     end;
288
289     //Теперь - к той версии что самая малоуровневая - добавить нулей.
290     If CurrVerLevels < MaxLevel then begin
291       For I := 1 to MaxLevel - CurrVerLevels do begin
292         CurrentVerTemp := CurrentVerTemp+'.0';
293       end;
294     end;
295     If InstalledVerLevels < MaxLevel then begin
296       For I := 1 to MaxLevel - InstalledVerLevels do begin
297         InstalledVerTemp := InstalledVerTemp+'.0';
298       end;
299     end;
300
301     //Ну а теперь - собсно сравнение наконецто.
302     I := 0;
303     repeat
304       I := I+1;
305       InstalledVerTemp := Parse(InstalledVerTemp,'.',TempStr);
306       CurrentVerTemp := Parse(CurrentVerTemp,'.',TempStr2);
307       If StrToInt(TempStr2) > StrToInt(TempStr) then Result := true;
308     until (I = MaxLevel) or (Result = true);
309   end;
310 end;
311
312 Function VersionIsUpdatable(Version : string) : boolean;
313 //Проверить - есть ли эта версия в списке версий пригодных для обновления
314 var
315   ParsedStr, CheckableVer : string;
316 begin
317   //Инициализация
318   Result := false;
319
320   //Собсно проверяем.
321   ParsedStr := UpdateFrom;
322   repeat
323     ParsedStr := Parse(ParsedStr,';',CheckableVer);
324     if CheckableVer <> '' then begin
325       if CheckableVer = Version then begin
326         //Ага, нашли, есть оно в списке.
327         Result := true;
328       end;
329     end;
330   until (ParsedStr = '') or (Result = true);
331
332 end;
333
334 Function InitializeSetup() : boolean;
335 var
336   AllOk, TempBool : boolean;
337   TempStr, TempVersionsStr, CheckableVer : string;
338   ResultCode : integer;
339
340 begin
341   //Ну типа, скрипт! :))))
342   //MsgBox(ExpandConstant('{cm:TheStartOfInstallation}'),mbError,MB_OK);
343
344   AllOk := true;  //Типа индикатор того что все в порядке.
345
346   DoNewInstall := false;
347   DoUpdate := false;
348   CurrentVer := '';
349
350   //Есть ли запись в реестре?
351   If RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = true then begin
352     //Если уже стоит какая-то версия
353     //Смотрим - не та же самая ли эта версия которая в пакете?
354     //Получить номер текущей версии.
355     RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver',TempStr);
356     //Вопрос про продолжение закомментирован, ибо по сути ниже описан еще минимум 1 вопрос на эту тему для всех возможных вариантов развития событий.
357 //    if TempStr = AppVer then begin
358 //      //Та же версия. Спрашиваем у юзверя - продолжать ли установку?
359 //      if MsgBox(ExpandConstant('{cm:PackageVersionInstalled,'+AppVer+'}'),mbConfirmation,MB_YESNO) = IDNO then begin
360 //        //Юзверь отказался продолжать установку.
361 //        AllOk := false;
362 //      end;
363 //    end;
364
365     If (NoUpdate = false) and (AllOk = true) then begin
366       //Если апдейт разрешен
367
368       //И проверить - входит ли эта версия в список апдейтабельных версий.
369       TempVersionsStr := UpdateFrom;
370       TempBool := false;    //Индикатор - подходит ли версия для апдейта.
371       repeat
372         TempVersionsStr := Parse(TempVersionsStr,';',CheckableVer);
373         if CheckableVer <> '' then begin
374           if CheckableVer = TempStr then begin
375             //Подходит.
376             TempBool := true;
377           end;
378         end;
379       until (TempVersionsStr = '') or (TempBool = true);
380
381       if TempBool = true then begin
382         //Если подходит - разрешаем апдейт.
383         DoUpdate := true;  //Разрешить апдейт.
384         RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
385         InstallPath := TempStr;
386         CurrentVer := CheckableVer;
387       end
388       else begin
389         //Версия апдейту не подлежит. Можно разве что предварительно запустить деинсталлер уже установленной
390         //версии. Это будет сделано ниже.
391       end;
392     end
393     else begin
394       //Уже стоит какая-то версия, но апдейт запрещен.
395       //В таком случае, опять же, будет предложено запустить деинсталляцию после чего
396       //продолжить по сценарию новой установки.
397     end;
398   end;
399
400   //Нужен ли сценарий полной установки?
401   If (AllOk = true) and ((RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = false) or (DoUpdate = false)) and (NoFullInstall = false) then begin
402     //Вроде нужно.
403     DoNewInstall := true;
404     //Посмотрим - нужно ли избавиться от старой версии проги?
405     if RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = true then begin
406       //О как. Запись в реестре есть, а апдейт оказывается не запущен. Значит установленная версия апдейту
407       //не подлежит. Тут все зависит от того, существует ли директория с прогой на венте, а также
408       //есть ли там экзейник деинсталлёра. Для начала проверим наличие директории с прогой.
409       RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
410       If DirExists(TempStr) = true then begin
411         //О как. Есть такое дело.
412         //Теперь попробуем нарыть в реестре путь к деинсталлеру.
413         TempStr := '';
414         if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString') = true then begin
415           //Выдернуть путь из реестра.
416           RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString',TempStr);
417           //Если нужно - убрать '"' по краям.
418           TempStr := RemoveQuotes(TempStr);
419         end;
420         //Собсно проверяем - существует ли экзейник деинсталлера.
421         if FileExists(TempStr) = true then begin
422           //Файлег существует и надо предложить его запустить.
423           if MsgBox(ExpandConstant('{cm:InstVerFound}'),mbConfirmation,MB_YESNO) = IDYES then begin
424             //Усе ок, юзверь запустил деинсталляцию.
425             Exec(TempStr,'','',SW_SHOW,ewWaitUntilTerminated,ResultCode);
426             //И "поспать" 5 секунд чтобы файлеги успели удалиться.
427             Sleep(5000);
428             //Если файлик деинсталлера до сих пор на месте - вывести окошк с кнопкой чтоб юзверь сам нажмал на него
429             //когда деинсталл завершится. Ибо там всякое бывает, отследить момент реального завершения деинсталла сложно.
430             if FileExists(TempStr) = true then begin
431               MsgBox(ExpandConstant('{cm:PressOkAfterUninstall}'),mbError,MB_OK);
432             end;
433             //Деинсталл завершена Проверить, так ли это...
434             if FileExists(TempStr) = false then begin
435               //Можно запускать нормальную установку. Оставляем все как есть, оно само пойдет по стандартному
436               //сценарию.
437             end
438             else begin
439               MsgBox(ExpandConstant('{cm:UninstallFailedByUnknownError,'+ExtractFilePath(TempStr)+'}'),mbError,MB_OK);
440               DoNewInstall := false;
441             end;
442           end
443           else begin
444             //Юзверь отказался выполнять деинсталляцию.
445             //Отмена установки.
446             MsgBox(ExpandConstant('{cm:UninstallFailed,'+ExtractFilePath(TempStr)+'}'),mbError,MB_OK);
447             DoNewInstall := false;
448           end;
449         end
450         else begin
451           //Файлега не существует, таким образом остается только спросить у юзверя - продолжать ли
452           //установку невзирая на возможные глюканы.
453           //Надо еще выдрать каталог с прогой.
454           RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
455           if MsgBox(ExpandConstant('{cm:InstalledAndNoUninstaller,'+TempStr+'}'),mbConfirmation,MB_YESNO) = IDYES then begin
456             //Юзверь таки решил продолжать установку... Не делаем ничего - оно дальше пойдет по нормальному сценарию.
457           end
458           else begin
459             //Юзверь отменил установку.
460             DoNewInstall := false;
461           end;
462         end;
463       end
464       else begin
465         //Нету проги на венте. А это значит что запись в реестре - по-видимому не более чем запись в реестре,
466         //а значит можно безболезненно действовать по обычному сценарию для новой установки.
467       end;
468     end;
469
470     //Запуск установки по стандартному сценарию.
471     If DoNewInstall = true then begin
472       //Получить путь для инсталляции.
473       if RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path') = true then begin
474         //Если в реестре сохранилась запись о пути - воспользуемся ей.
475         RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',InstallPath);
476       end
477       else begin
478         //Не удалось добыть такой информации - кидаем в ProgramFiles.
479         InstallPath := AddBackslash(ExpandConstant('{pf}'))+'\'+DeveloperName+'\'+AppName;
480       end;
481       DoNewInstall:= true;
482     end
483     else begin
484       //По пути был какой-то облом.
485       AllOk := false;
486     end;
487   end
488   else begin
489     //Нельзя ставиться с нуля. В принципе. Если апдейт не запущен - значит инсталлер не нашел такую версию,
490     //которую он может обновить.
491     if (DoUpdate = false) and (AllOk = true) then begin
492       MsgBox(ExpandConstant('{cm:NothingToUpdate}'),mbError,MB_OK);
493       AllOk := false;
494     end;
495   end;
496
497   If AllOk = true then begin
498     //Можно начинать установку.
499     Result := true;
500   end
501   else begin
502     //Облом с установкой. Вот так вот :(.
503     //MsgBox(ExpandConstant('{cm:InstallingAborted}'),mbError,MB_OK);
504     Result := false;
505   end;
506 end;
507
508
509 Function ConstInstallPath(Default : string) : string;
510 begin
511   Result := InstallPath;
512 end;
513
514 Function ConstAppVer(Default : string) : string;
515 begin
516   Result := AppVer;
517 end;
518
519 Function ConstAppName(Default : string) : string;
520 begin
521   Result := AppName;
522 end;
523
524 Function ConstUninstallExe(Default : string) : string;
525 begin
526   Result := '';
527   if RegValueExists(HKEY_LOCAL_MACHINE,'\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString') = true then begin
528     RegQueryStringValue(HKEY_LOCAL_MACHINE,'\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString',Result);
529     Result := RemoveQuotes(Result);
530   end;
531 end;
532
533 Function ConstAppVerName(Default : string) : string;
534 begin
535   Result := AppName+' '+AppVer;
536 end;
537
538 Function ConstDeveloperName(Default : string) : string;
539 begin
540   Result := DeveloperName;
541 end;
542
543 Function CheckDoNewInstall() : boolean;
544 begin
545   Result := DoNewInstall;
546 end;
547
548 Function CheckDoUpdate() : boolean;
549 begin
550   Result := DoUpdate;
551 end;
552
553 //Function CheckUpdate_0_0_0_1() : boolean;
554 ////Функция-екзампл - по которой будет собсно проверяться - запускать ли апдейт именно с этой версии.
555 //begin
556 //  Result := VersionIsUpdatable('0.0.0.1');
557 //end;
558
559 Function ShouldSkipPage(CurPage: Integer) : boolean;
560 begin
561   //Разные пропуски разных "страниц".
562   Result := false;
563   //MsgBox(IntToStr(CurPage),mbError,MB_OK);
564   If DoUpdate = true then begin
565     //MsgBox('It is update!',mbError,MB_OK);
566     //Если это апдейт
567     If CurPage = 2 then begin
568       //Если это страница лицензии - то показывать не нужно - оно было принято при прошлой установке.
569       Result := true;
570     end;
571     If CurPage = 6 then begin
572       //Если это страница выбора пути.
573       If DirExists(InstallPath) = true then begin
574         //Если папка уже существует
575         //То можно окно выбора пути не показывать.
576         Result := true;
577       end;
578     end;
579     If CurPage = 7 then begin
580       //Если это страница выбора типа установки - он в этом случае всегда "обновление".
581       Result := true;
582     end;
583     If CurPage = 8 then begin
584       //Если это страница выбора папки в меню Пуск
585       Result := true;
586     end;
587   end;
588   If DoNewInstall = true then begin
589     //Если это новая установка.
590     If CurPage = 7 then begin
591       //Если это страница выбора типа установки - он в этом случае всегда "полная".
592       Result := true;
593     end;
594   end;
595 end;
Note: See TracBrowser for help on using the browser.