root/trunk/default.iss

Revision 9, 21.1 kB (checked in by sagrer, 1 year ago)
  1. Поправил документацию. Добавил ридмишку по сборке из исходника.
  2. Добавил опцию вывода значка на рабочий стол при инсталляции.
  • Property svnmailer:content-charset set to cp1251
Line 
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;;               Ýòî iss-ñêðèïò ïî óìîë÷àíèþ             ;;
3 ;;               äëÿ ñêàðìëèâàíèÿ IssBuilder.            ;;
4 ;;                                                       ;;
5 ;;              Copyright (C) 2007 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 ;; Ôàéë äëÿ ñáîðêè EiEdit
18
19 [Setup]
20 InternalCompressLevel=ultra
21 OutputBaseFilename=EiEdit_0_0_0_0
22 SolidCompression=true
23 Compression=lzma/ultra
24 OutputDir=.\
25 SourceDir=.\
26 VersionInfoVersion=0.0.0.0
27 VersionInfoTextVersion=EiEdit 0.0.0.0
28 VersionInfoCompany=Gipat Group
29 VersionInfoDescription=EiEdit 0.0.0.0
30 ShowLanguageDialog=no
31 AppName={code:ConstAppName}
32 AppVerName=EiEdit 0.0.0.0
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 Gipat Group
41 RestartIfNeededByRun=false
42 WizardImageFile=compiler:wizmodernimage-is.bmp
43 WizardSmallImageFile=compiler:wizmodernsmallimage-is.bmp
44 VersionInfoCopyright=Copyright © 2007 Gipat Group
45 LicenseFile=GG_opened_EI-editor-utility_license.txt
46 InfoBeforeFile=ChangeLog.txt
47 [_ISTool]
48 UseAbsolutePaths=false
49 [Languages]
50 Name: Russian; MessagesFile: compiler:Languages\Russian.isl
51 Name: English; MessagesFile: compiler:Default.isl
52 [Components]
53 Name: CurrVersion_Main; Description: Îñíîâíûå ôàéëû ïîëíîé âåðñèè; Flags: fixed; Check: CheckDoNewInstall; Types: StandardInstall
54 Name: AlwaysInstall; Description: Îáÿçàòåëüíûå ôàéëû; Flags: fixed; Types: StandardInstall
55 [Icons]
56 Name: {group}\readme.txt; Filename: {app}\readme.txt; Components: CurrVersion_Main
57 Name: {group}\Äåèíñòàëëèðîâàòü; Filename: {uninstallexe}; Components: CurrVersion_Main
58 Name: {group}\EiEdit; Filename: {app}\EiEdit.exe; Components: CurrVersion_Main
59 Name: {userdesktop}\EiEdit; Filename: {app}\EiEdit.exe; Components: CurrVersion_Main; Tasks: " IconToDesktop_ru"
60 [Types]
61 Name: StandardInstall; Description: Îáûêíîâåííàÿ óñòàíîâêà; Languages:
62 [Code]
63 const
64   AppName = 'EiEdit';   //Òèïà èìÿ àïëèêàøîíà
65   AppVer = '0.0.0.0';
66   NoFullInstall = false;   //Çàïðåò\ðàçðåøåíèå ïîëíîé óñòàíîâêè
67   NoUpdate = true;       //Çàïðåò\ðàçðåøåíèå àïäåéòà
68   UpdateFrom = '0.0.0.0;0.0.0.1';     //Âåðñèè, ñ êîòîðûõ ìîæíî îáíîâëÿòü.
69   DeveloperName = 'Gipat Group';    //Èìÿ äåâåëîïåðà - ÷àñòü ïóòè â ðååñòðå.
70
71 var
72   InstallPath, CurrentVer : string;
73   DoNewInstall, DoUpdate : boolean;
74
75 Function Parse (Str, Separator : string; Var Parsed : string) : string;
76 var
77   I, StrLength : integer;
78 begin
79   //Ôóíêà äëÿ ïàðñèíãà ñòðîê. Êðèâàÿ, íî êàê óìåþ :(.
80   I := 0;
81   StrLength := Length(Str);
82   if StrLength > 0 then begin
83     Parsed := '';
84
85     repeat
86       I := I+1;
87       If Str[I] <> Separator then begin
88         //Åñëè ñåïàðàòîð íå âñòðåòèëñÿ - çàïîìíèòü ñèìâîë.
89         Parsed := Parsed+Str[I];
90       end;
91     until (I = StrLength) or (Str[I] = Separator);
92
93     Result := Str;
94     Delete(Result,1,I);
95   end
96   else begin
97     Parsed := Str;
98     Result := '';
99   end;
100 end;
101
102 Function IsNumericStr (Str : string) : boolean;
103 var
104   I, StrLength : integer;
105   FindedChar : boolean;
106 begin
107   //À ýòà ôóíêà äîëæíà îïðåäåëÿòü, ñîñòîèò ëè ñòðîêà òîëüêî èç öèôð.
108
109   Result := true;  //Óìîë÷àëüíûé ðåçóëüòàò.
110
111   StrLength := Length(Str);
112   If StrLength > 0 then begin
113     //Åñëè â ñòðîêå ÷åòà åñòü òî ìîæíî ïðèñòóïàòü.
114     For I := 1 to StrLength do begin
115       FindedChar := true;
116       If Str[I] = '1' then FindedChar := false;  //Äîñòàòî÷íî âûïîëíèòñÿ 1 ïðîâåðêå - è ÷àð áóäåò íå íàéäåí :)
117       If Str[I] = '2' then FindedChar := false;
118       If Str[I] = '3' then FindedChar := false;
119       If Str[I] = '4' then FindedChar := false;
120       If Str[I] = '5' then FindedChar := false;
121       If Str[I] = '6' then FindedChar := false;
122       If Str[I] = '7' then FindedChar := false;
123       If Str[I] = '8' then FindedChar := false;
124       If Str[I] = '9' then FindedChar := false;
125       If Str[I] = '0' then FindedChar := false;
126
127       //È åñëè áûë îáíàðóæåí ñèìâîë-íå öèôðà - îáëîìèòü âñå íàôèã.
128       If FindedChar = true then Result := false;
129     end;
130   end
131   else begin
132     Result := false;  //Òèïà ñòðîêà ïóñòàÿ.
133   end;
134 end;
135
136 Function IsVersionStr (Str : string) : boolean;
137 var
138   I, StrLength : integer;
139   FindedChar, WasPoint : boolean;
140 begin
141   //À ýòà ôóíêà äîëæíà îïðåäåëÿòü, ñîñòîèò ëè ñòðîêà òîëüêî èç öèôð.
142
143   Result := true;  //Óìîë÷àëüíûé ðåçóëüòàò.
144
145   StrLength := Length(Str);
146   If StrLength > 0 then begin
147     //Åñëè â ñòðîêå ÷åòà åñòü òî ìîæíî ïðèñòóïàòü.
148     WasPoint := false;
149     For I := 1 to StrLength do begin
150       FindedChar := true;
151       If Str[I] = '1' then begin
152         FindedChar := false;
153         WasPoint := false;
154       end;
155       If Str[I] = '2' then begin
156         FindedChar := false;
157         WasPoint := false;
158       end;
159       If Str[I] = '3' then begin
160         FindedChar := false;
161         WasPoint := false;
162       end;
163       If Str[I] = '4' then begin
164         FindedChar := false;
165         WasPoint := false;
166       end;
167       If Str[I] = '5' then begin
168         FindedChar := false;
169         WasPoint := false;
170       end;
171       If Str[I] = '6' then begin
172         FindedChar := false;
173         WasPoint := false;
174       end;
175       If Str[I] = '7' then begin
176         FindedChar := false;
177         WasPoint := false;
178       end;
179       If Str[I] = '8' then begin
180         FindedChar := false;
181         WasPoint := false;
182       end;
183       If Str[I] = '9' then begin
184         FindedChar := false;
185         WasPoint := false;
186       end;
187       If Str[I] = '0' then begin
188         FindedChar := false;
189         WasPoint := false;
190       end;
191       If Str[I] = '.' then begin
192         FindedChar := false;
193         If WasPoint = true then begin
194           //Åñëè äî ýòîãî óæå áûëà òî÷êà - òî àáëîîîì.
195           FindedChar := true;
196         end;
197         WasPoint := true;
198       end;
199
200       //È åñëè áûë îáíàðóæåí ñèìâîë-íå öèôðà è íå òî÷êà - îáëîìèòü âñå íàôèã.
201       If FindedChar = true then Result := false;
202     end;
203   end
204   else begin
205     Result := false;  //Òèïà ñòðîêà ïóñòàÿ.
206   end;
207 end;
208
209 Function IsNewVersion(InstalledVer, CurrentVer : string) : boolean;
210 var
211   CurrVerLevels, I,
212   InstalledVerLevels, MaxLevel : integer;
213   TempStr, TempStr2,
214   InstalledVerTemp, CurrentVerTemp : string;
215 begin
216   //Ôóíêà äîëæíà ïðîâåðÿòü, ÿâëÿåòñÿ ëè åíòîò èíñòàëë áîëåå íîâîé âåðñèåé.
217
218   Result := false;  //Òèïà óìîë÷àëüíîå çíà÷åíèå.
219   InstalledVerTemp := InstalledVer;
220   CurrentVerTemp := CurrentVer;
221
222
223   If (IsVersionStr(InstalledVer) = true) and (IsVersionStr(CurrentVer) = true) then begin
224     //Òîëüêî åñëè â îáîèõ ñòðîêàõ - âåðñèè.
225
226     //Äëÿ íà÷àëà - ïîñìîòðåòü ñêîëüêî óðîâíåé âåðñèè â òåêóùåé âåðñèè.
227     TempStr := CurrentVerTemp;
228     CurrVerLevels := 1;  //Åñòü êàê ìèíèìóì 1 óðîâåíü.
229     repeat
230       If Pos('.',TempStr) <> 0 then begin
231         CurrVerLevels := CurrVerLevels + 1;   //Åñòü ìèíèìóì åùå 1 óðîâåíü.
232         TempStr := Parse(TempStr,'.',TempStr2);
233       end;
234     until Pos('.',TempStr) = 0;
235
236     //È â ïðîèíñòàëåííîé.
237     TempStr := InstalledVerTemp;
238     InstalledVerLevels := 1;  //Åñòü êàê ìèíèìóì 1 óðîâåíü.
239     repeat
240       If Pos('.',TempStr) <> 0 then begin
241         InstalledVerLevels := InstalledVerLevels + 1;   //Åñòü ìèíèìóì åùå 1 óðîâåíü.
242         TempStr := Parse(TempStr,'.',TempStr2);
243       end;
244     until Pos('.',TempStr) = 0;
245
246     //Òåïåðü âû÷èñëèòü ìàêñèìàëüíûé óðîâåíü.
247     If CurrVerLevels > InstalledVerLevels then begin
248       MaxLevel := CurrVerLevels;
249     end
250     else begin
251       MaxLevel := InstalledVerLevels;
252     end;
253
254     //Òåïåðü - ê òîé âåðñèè ÷òî ñàìàÿ ìàëîóðîâíåâàÿ - äîáàâèòü íóëåé.
255     If CurrVerLevels < MaxLevel then begin
256       For I := 1 to MaxLevel - CurrVerLevels do begin
257         CurrentVerTemp := CurrentVerTemp+'.0';
258       end;
259     end;
260     If InstalledVerLevels < MaxLevel then begin
261       For I := 1 to MaxLevel - InstalledVerLevels do begin
262         InstalledVerTemp := InstalledVerTemp+'.0';
263       end;
264     end;
265
266     //Íó à òåïåðü - ñîáñíî ñðàâíåíèå íàêîíåöòî.
267     I := 0;
268     repeat
269       I := I+1;
270       InstalledVerTemp := Parse(InstalledVerTemp,'.',TempStr);
271       CurrentVerTemp := Parse(CurrentVerTemp,'.',TempStr2);
272       If StrToInt(TempStr2) > StrToInt(TempStr) then Result := true;
273     until (I = MaxLevel) or (Result = true);
274   end;
275 end;
276
277 Function VersionIsUpdatable(Version : string) : boolean;
278 //Ïðîâåðèòü - åñòü ëè ýòà âåðñèÿ â ñïèñêå âåðñèé ïðèãîäíûõ äëÿ îáíîâëåíèÿ
279 var
280   ParsedStr, CheckableVer : string;
281 begin
282   //Èíèöèàëèçàöèÿ
283   Result := false;
284
285   //Ñîáñíî ïðîâåðÿåì.
286   ParsedStr := UpdateFrom;
287   repeat
288     ParsedStr := Parse(ParsedStr,';',CheckableVer);
289     if CheckableVer <> '' then begin
290       if CheckableVer = Version then begin
291         //Àãà, íàøëè, åñòü îíî â ñïèñêå.
292         Result := true;
293       end;
294     end;
295   until (ParsedStr = '') or (Result = true);
296
297 end;
298
299 Function InitializeSetup() : boolean;
300 var
301   AllOk, TempBool : boolean;
302   TempStr, TempVersionsStr, CheckableVer : string;
303   ResultCode : integer;
304
305 begin
306   //Íó òèïà, ñêðèïò! :))))
307   //MsgBox('Ñòàðò óñòàíîâêè',mbError,MB_OK);
308
309   AllOk := true;  //Òèïà èíäèêàòîð òîãî ÷òî âñå â ïîðÿäêå.
310
311   DoNewInstall := false;
312   DoUpdate := false;
313   CurrentVer := '';
314
315   //Åñòü ëè çàïèñü â ðååñòðå?
316   If RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = true then begin
317     //Åñëè óæå ñòîèò êàêàÿ-òî âåðñèÿ
318     //Ñìîòðèì - íå òà æå ñàìàÿ ëè ýòà âåðñèÿ êîòîðàÿ â ïàêåòå?
319     //Ïîëó÷èòü íîìåð òåêóùåé âåðñèè.
320     RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver',TempStr);
321     if TempStr = AppVer then begin
322       //Òà æå âåðñèÿ. Ñïðàøèâàåì ó þçâåðÿ - ïðîäîëæàòü ëè óñòàíîâêó?
323       if MsgBox('Âåðñèÿ, ñîäåðæàùàÿñÿ â äàííîì ïàêåòå ('+AppVer+') ñóäÿ ïî âñåìó óæå óñòàíîâëåíà. Åñëè âû ïðîäîëæèòå óñòàíîâêó - òî ïî-âèäèìîìó ïîòðåáóåòñÿ äåèíñòàëëèðîâàòü óæå óñòàíîâëåííóþ âåðñèþ. Ïðîäîëæèòü óñòàíîâêó?',mbConfirmation,MB_YESNO) = IDNO then begin
324         //Þçâåðü îòêàçàëñÿ ïðîäîëæàòü óñòàíîâêó.
325         AllOk := false;
326       end;
327     end;
328
329     If (NoUpdate = false) and (AllOk = true) then begin
330       //Åñëè àïäåéò ðàçðåøåí
331
332       //È ïðîâåðèòü - âõîäèò ëè ýòà âåðñèÿ â ñïèñîê àïäåéòàáåëüíûõ âåðñèé.
333       TempVersionsStr := UpdateFrom;
334       TempBool := false;    //Èíäèêàòîð - ïîäõîäèò ëè âåðñèÿ äëÿ àïäåéòà.
335       repeat
336         TempVersionsStr := Parse(TempVersionsStr,';',CheckableVer);
337         if CheckableVer <> '' then begin
338           if CheckableVer = TempStr then begin
339             //Ïîäõîäèò.
340             TempBool := true;
341           end;
342         end;
343       until (TempVersionsStr = '') or (TempBool = true);
344
345       if TempBool = true then begin
346         //Åñëè ïîäõîäèò - ðàçðåøàåì àïäåéò.
347         DoUpdate := true;  //Ðàçðåøèòü àïäåéò.
348         RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
349         InstallPath := TempStr;
350         CurrentVer := CheckableVer;
351       end
352       else begin
353         //Âåðñèÿ àïäåéòó íå ïîäëåæèò. Ìîæíî ðàçâå ÷òî ïðåäâàðèòåëüíî çàïóñòèòü äåèíñòàëëåð óæå óñòàíîâëåííîé
354         //âåðñèè. Ýòî áóäåò ñäåëàíî íèæå.
355       end;
356     end
357     else begin
358       //Óæå ñòîèò êàêàÿ-òî âåðñèÿ, íî àïäåéò çàïðåùåí.
359       // òàêîì ñëó÷àå, îïÿòü æå, áóäåò ïðåäëîæåíî çàïóñòèòü äåèíñòàëëÿöèþ ïîñëå ÷åãî
360       //ïðîäîëæèòü ïî ñöåíàðèþ íîâîé óñòàíîâêè.
361     end;
362   end;
363
364   //Íóæåí ëè ñöåíàðèé ïîëíîé óñòàíîâêè?
365   If (AllOk = true) and ((RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = false) or (DoUpdate = false)) and (NoFullInstall = false) then begin
366     //Âðîäå íóæíî.
367     DoNewInstall := true;
368     //Ïîñìîòðèì - íóæíî ëè èçáàâèòüñÿ îò ñòàðîé âåðñèè ïðîãè?
369     if RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'ver') = true then begin
370       //Î êàê. Çàïèñü â ðååñòðå åñòü, à àïäåéò îêàçûâàåòñÿ íå çàïóùåí. Çíà÷èò óñòàíîâëåííàÿ âåðñèÿ àïäåéòó
371       //íå ïîäëåæèò. Òóò âñå çàâèñèò îò òîãî, ñóùåñòâóåò ëè äèðåêòîðèÿ ñ ïðîãîé íà âåíòå, à òàêæå
372       //åñòü ëè òàì ýêçåéíèê äåèíñòàëëžðà. Äëÿ íà÷àëà ïðîâåðèì íàëè÷èå äèðåêòîðèè ñ ïðîãîé.
373       RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
374       If DirExists(TempStr) = true then begin
375         //Î êàê. Åñòü òàêîå äåëî.
376         //Òåïåðü ïîïðîáóåì íàðûòü â ðååñòðå ïóòü ê äåèíñòàëëåðó.
377         TempStr := '';
378         if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString') = true then begin
379           //Âûäåðíóòü ïóòü èç ðååñòðà.
380           RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString',TempStr);
381           //Åñëè íóæíî - óáðàòü '"' ïî êðàÿì.
382           TempStr := RemoveQuotes(TempStr);
383         end;
384         //Ñîáñíî ïðîâåðÿåì - ñóùåñòâóåò ëè ýêçåéíèê äåèíñòàëëåðà.
385         if FileExists(TempStr) = true then begin
386           //Ôàéëåã ñóùåñòâóåò è íàäî ïðåäëîæèòü åãî çàïóñòèòü.
387           if MsgBox('Îáíàðóæåíà óæå óñòàíîâëåííàÿ âåðñèÿ. ×òîáû óñòàíîâèòü äàííóþ âåðñèþ - íàäî äåèíñòàëëèðîâàòü óæå óñòàíîâëåííóþ. Äåèíñòàëëÿòîð îáíàðóæåí. Çàïóñòèòü äåèíñòàëëÿòîð?',mbConfirmation,MB_YESNO) = IDYES then begin
388             //Óñå îê, þçâåðü çàïóñòèë äåèíñòàëëÿöèþ.
389             Exec(TempStr,'','',SW_SHOW,ewWaitUntilTerminated,ResultCode);
390             //È "ïîñïàòü" 5 ñåêóíä ÷òîáû ôàéëåãè óñïåëè óäàëèòüñÿ.
391             Sleep(5000);
392             //Åñëè ôàéëèê äåèíñòàëëåðà äî ñèõ ïîð íà ìåñòå - âûâåñòè îêîøê ñ êíîïêîé ÷òîá þçâåðü ñàì íàæìàë íà íåãî
393             //êîãäà äåèíñòàëë çàâåðøèòñÿ. Èáî òàì âñÿêîå áûâàåò, îòñëåäèòü ìîìåíò ðåàëüíîãî çàâåðøåíèÿ äåèíñòàëëà ñëîæíî.
394             if FileExists(TempStr) = true then begin
395               MsgBox('Ïî çàâåðøåíèþ äåèíñòàëëÿöèè - íàæìèòå êíîïêó ÎÊ. ÍÅ ÍÀÆÈÌÀÉÒÅ êíîïêó Îê äî çàâåðøåíèÿ äåèíñòàëëÿöèè!!!',mbError,MB_OK);
396             end;
397             //Äåèíñòàëë çàâåðøåíà Ïðîâåðèòü, òàê ëè ýòî...
398             if FileExists(TempStr) = false then begin
399               //Ìîæíî çàïóñêàòü íîðìàëüíóþ óñòàíîâêó. Îñòàâëÿåì âñå êàê åñòü, îíî ñàìî ïîéäåò ïî ñòàíäàðòíîìó
400               //ñöåíàðèþ.
401             end
402             else begin
403               MsgBox('Äåèíñòàëëÿöèÿ íå âûïîëíåíà ïî íåèçâåñòíîé ïðè÷èíå. Âûïîëíèòå äåèíñòàëëÿöèþ âðó÷íóþ, ëèáî âðó÷íóþ óäàëèòå êàòàëîã '+ExtractFilePath(TempStr)+' ïîñëå ÷åãî çàïóñòèòå ýòó óñòàíîâêó çàíîâî.',mbError,MB_OK);
404               DoNewInstall := false;
405             end;
406           end
407           else begin
408             //Þçâåðü îòêàçàëñÿ âûïîëíÿòü äåèíñòàëëÿöèþ.
409             //Îòìåíà óñòàíîâêè.
410             MsgBox('Äåèíñòàëëÿöèÿ íå âûïîëíåíà. Âûïîëíèòå äåèíñòàëëÿöèþ âðó÷íóþ, ëèáî âðó÷íóþ óäàëèòå êàòàëîã '+ExtractFilePath(TempStr)+' ïîñëå ÷åãî çàïóñòèòå ýòó óñòàíîâêó çàíîâî.',mbError,MB_OK);
411             DoNewInstall := false;
412           end;
413         end
414         else begin
415           //Ôàéëåãà íå ñóùåñòâóåò, òàêèì îáðàçîì îñòàåòñÿ òîëüêî ñïðîñèòü ó þçâåðÿ - ïðîäîëæàòü ëè
416           //óñòàíîâêó íåâçèðàÿ íà âîçìîæíûå ãëþêàíû.
417           //Íàäî åùå âûäðàòü êàòàëîã ñ ïðîãîé.
418           RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',TempStr);
419           if MsgBox('Îáíàðóæåíà óæå óñòàíîâëåííàÿ âåðñèÿ, íî äåèíñòàëëÿòîð îòñóòñòâóåò. Ðåêîìåíäóåòñÿ ïðåêðàòèòü óñòàíîâêó è âðó÷íóþ óäàëèòü êàòàëîã '+TempStr+' ïîñëå ÷åãî çàïóñòèòü ýòó óñòàíîâêó çàíîâî. Íî âû âñå-æå ìîæåòå è ïðîäîëæèòü ïðîöåññ óñòàíîâêè (ýòî ìîæåò ïðèâåñòè ê îøèáêàì). Ïðîäîëæèòü óñòàíîâêó?',mbConfirmation,MB_YESNO) = IDYES then begin
420             //Þçâåðü òàêè ðåøèë ïðîäîëæàòü óñòàíîâêó... Íå äåëàåì íè÷åãî - îíî äàëüøå ïîéäåò ïî íîðìàëüíîìó ñöåíàðèþ.
421           end
422           else begin
423             //Þçâåðü îòìåíèë óñòàíîâêó.
424             DoNewInstall := false;
425           end;
426         end;
427       end
428       else begin
429         //Íåòó ïðîãè íà âåíòå. À ýòî çíà÷èò ÷òî çàïèñü â ðååñòðå - ïî-âèäèìîìó íå áîëåå ÷åì çàïèñü â ðååñòðå,
430         //à çíà÷èò ìîæíî áåçáîëåçíåííî äåéñòâîâàòü ïî îáû÷íîìó ñöåíàðèþ äëÿ íîâîé óñòàíîâêè.
431       end;
432     end;
433
434     //Çàïóñê óñòàíîâêè ïî ñòàíäàðòíîìó ñöåíàðèþ.
435     If DoNewInstall = true then begin
436       //Ïîëó÷èòü ïóòü äëÿ èíñòàëëÿöèè.
437       if RegValueExists(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path') = true then begin
438         //Åñëè â ðååñòðå ñîõðàíèëàñü çàïèñü î ïóòè - âîñïîëüçóåìñÿ åé.
439         RegQueryStringValue(HKEY_CURRENT_USER,'Software\'+DeveloperName+'\'+AppName,'path',InstallPath);
440       end
441       else begin
442         //Íå óäàëîñü äîáûòü òàêîé èíôîðìàöèè - êèäàåì â ProgramFiles.
443         InstallPath := AddBackslash(ExpandConstant('{pf}'))+'\'+DeveloperName+'\'+AppName;
444       end;
445       DoNewInstall:= true;
446     end
447     else begin
448       //Ïî ïóòè áûë êàêîé-òî îáëîì.
449       AllOk := false;
450     end;
451   end
452   else begin
453     //Íåëüçÿ ñòàâèòüñÿ ñ íóëÿ.  ïðèíöèïå. Åñëè àïäåéò íå çàïóùåí - çíà÷èò èíñòàëëåð íå íàøåë òàêóþ âåðñèþ,
454     //êîòîðóþ îí ìîæåò îáíîâèòü.
455     if (DoUpdate = false) and (AllOk = true) then begin
456       MsgBox('Èíñòàëëÿòîðó íå óäàëîñü íàéòè íà êîìïüþòåðå âåðñèé, êîòîðûå îí ìîã áû îáíîâèòü. Î òîì, êàêèå âåðñèè â ïðèíöèïå ìîãóò áûòü îáíîâëåíû - ñì. ïî èìåíè ôàéëà ïàêåòà. Äàííûé ïàêåò íå ïðåäíàçíà÷åí äëÿ óñòàíîâêè ñ íóëÿ, èì ìîæíî òîëüêî îáíîâèòü îäíó èç îïðåäåëåííûõ óæå óñòàíîâëåííûõ âåðñèé - ïîýòîìó óñòàíîâêà îòìåíåíà.',mbError,MB_OK);
457       AllOk := false;
458     end;
459   end;
460
461   If AllOk = true then begin
462     //Ìîæíî íà÷èíàòü óñòàíîâêó.
463     Result := true;
464   end
465   else begin
466     //Îáëîì ñ óñòàíîâêîé. Âîò òàê âîò :(.
467     //MsgBox('Óñòàíîâêà îòìåíåíà :(',mbError,MB_OK);
468     Result := false;
469   end;
470 end;
471
472
473 Function ConstInstallPath(Default : string) : string;
474 begin
475   Result := InstallPath;
476 end;
477
478 Function ConstAppVer(Default : string) : string;
479 begin
480   Result := AppVer;
481 end;
482
483 Function ConstAppName(Default : string) : string;
484 begin
485   Result := AppName;
486 end;
487
488 Function ConstUninstallExe(Default : string) : string;
489 begin
490   Result := '';
491   if RegValueExists(HKEY_LOCAL_MACHINE,'\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString') = true then begin
492     RegQueryStringValue(HKEY_LOCAL_MACHINE,'\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+AppName+'_is1','UninstallString',Result);
493     Result := RemoveQuotes(Result);
494   end;
495 end;
496
497 Function ConstAppVerName(Default : string) : string;
498 begin
499   Result := AppName+' '+AppVer;
500 end;
501
502 Function ConstDeveloperName(Default : string) : string;
503 begin
504   Result := DeveloperName;
505 end;
506
507 Function CheckDoNewInstall() : boolean;
508 begin
509   Result := DoNewInstall;
510 end;
511
512 Function CheckDoUpdate() : boolean;
513 begin
514   Result := DoUpdate;
515 end;
516
517 //Function CheckUpdate_0_0_0_1() : boolean;
518 ////Ôóíêöèÿ-åêçàìïë - ïî êîòîðîé áóäåò ñîáñíî ïðîâåðÿòüñÿ - çàïóñêàòü ëè àïäåéò èìåííî ñ ýòîé âåðñèè.
519 //begin
520 //  Result := VersionIsUpdatable('0.0.0.1');
521 //end;
522
523 Function ShouldSkipPage(CurPage: Integer) : boolean;
524 begin
525   //Ðàçíûå ïðîïóñêè ðàçíûõ "ñòðàíèö".
526   Result := false;
527   //MsgBox(IntToStr(CurPage),mbError,MB_OK);
528   If DoUpdate = true then begin
529     //MsgBox('It is update!',mbError,MB_OK);
530     //Åñëè ýòî àïäåéò
531     If CurPage = 2 then begin
532       //Åñëè ýòî ñòðàíèöà ëèöåíçèè - òî ïîêàçûâàòü íå íóæíî - îíî áûëî ïðèíÿòî ïðè ïðîøëîé óñòàíîâêå.
533       Result := true;
534     end;
535     If CurPage = 6 then begin
536       //Åñëè ýòî ñòðàíèöà âûáîðà ïóòè.
537       If DirExists(InstallPath) = true then begin
538         //Åñëè ïàïêà óæå ñóùåñòâóåò
539         //Òî ìîæíî îêíî âûáîðà ïóòè íå ïîêàçûâàòü.
540         Result := true;
541       end;
542     end;
543     If CurPage = 7 then begin
544       //Åñëè ýòî ñòðàíèöà âûáîðà òèïà óñòàíîâêè - îí â ýòîì ñëó÷àå âñåãäà "îáíîâëåíèå".
545       Result := true;
546     end;
547     If CurPage = 8 then begin
548       //Åñëè ýòî ñòðàíèöà âûáîðà ïàïêè â ìåíþ Ïóñê
549       Result := true;
550     end;
551   end;
552   If DoNewInstall = true then begin
553     //Åñëè ýòî íîâàÿ óñòàíîâêà.
554     If CurPage = 7 then begin
555       //Åñëè ýòî ñòðàíèöà âûáîðà òèïà óñòàíîâêè - îí â ýòîì ñëó÷àå âñåãäà "ïîëíàÿ".
556       Result := true;
557     end;
558   end;
559 end;
560
561
562 [Registry]
563 Root: HKCU; Subkey: Software\{code:ConstDeveloperName}\{code:ConstAppName}\; Flags: createvalueifdoesntexist uninsdeletekey; Components: AlwaysInstall
564 Root: HKCU; Subkey: Software\{code:ConstDeveloperName}\{code:ConstAppName}\; ValueType: string; ValueName: path; ValueData: {app}; Components: AlwaysInstall
565 Root: HKCU; Subkey: Software\{code:ConstDeveloperName}\{code:ConstAppName}\; ValueType: string; ValueName: ver; ValueData: {code:ConstAppVer}; Components: AlwaysInstall
566 [Tasks]
567 Name: IconToDesktop_ru; Description: Ïîëîæèòü çíà÷åê íà ðàáî÷èé ñòîë.; Flags: unchecked; Components: CurrVersion_Main; Languages:
Note: See TracBrowser for help on using the browser.