root/trunk/default.iss

Revision 1, 22.0 kB (checked in by sagrer, 10 months ago)

Заливаю исходник.

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