1818; 根目录
1919#define RootPath " Metaminesweeper-v3.1.11"
2020; 图标
21- #define IconPath " Metaminesweeper-v3.1.11\ media\cat.ico"
21+ #define IconPath " media\cat.ico"
2222[Setup]
2323;注意:AppId 的值唯一标识此应用程序。不要在其他应用程序的安装程序中使用相同的 AppId 值。
2424;(要生成新的 GUID,请单击 Tools |在 IDE 中生成 GUID
@@ -47,8 +47,8 @@ OutputBaseFilename=Metaminesweeper-{#MyAppVersion}
4747Compression = lzma
4848SolidCompression = yes
4949WizardStyle = modern
50- SetupIconFile = {#IconPath}
51- UninstallDisplayIcon = {#IconPath}
50+ SetupIconFile = {#RootPath}\{# IconPath}
51+ UninstallDisplayIcon = {app} \{ #IconPath}
5252
5353[Languages]
5454Name : " english" ; MessagesFile : " compiler:Default.isl"
@@ -64,9 +64,166 @@ Source: {#RootPath}\*; DestDir: "{app}"; Flags: ignoreversion recursesubdirs cre
6464;注意:不要在任何共享系统文件上使用 “Flags: ignoreversion”
6565
6666[Icons]
67- Name : " {autoprograms}\{#MyAppName}" ; Filename : " {app} \{#AppPath}\{#MyAppExeName}"
67+ Name : " {autoprograms}\{#MyAppName}" ; Filename : " {app} \{#AppPath}\{#MyAppExeName}" ;
6868Name : " {autodesktop}\{#MyAppName}" ; Filename : " {app} \{#AppPath}\{#MyAppExeName}" ; Tasks: desktopicon ;
6969
7070[Run]
7171Filename : " {app} \{#AppPath}\{#MyAppExeName}" ; Description : " {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}" ; Flags : nowait postinstall skipifsilent runascurrentuser
72+ [Code]
73+ var
74+ Page: TWizardPage;
75+ AVFCheckbox, EVFCheckbox, RMVCheckbox, MVFCheckbox: TNewCheckbox;
76+ procedure FileAssociationPage ;
77+ begin
78+ Page := CreateCustomPage(wpSelectDir, ' 文件打开方式' , ' 勾选对应的文件类型,以添加对应文件类型使用{#MyAppName}的打开方式,然后点击“下一步”按钮。' );
7279
80+ AVFCheckbox := TNewCheckbox.Create(Page);
81+ AVFCheckbox.Top := 0 ;
82+ AVFCheckbox.Left := 0 ;
83+ AVFCheckbox.Width := Page.SurfaceWidth;
84+ AVFCheckbox.Caption := ' .avf' ;
85+ AVFCheckbox.Checked := False;
86+ AVFCheckbox.Parent := Page.Surface;
87+
88+ EVFCheckbox := TNewCheckbox.Create(Page);
89+ EVFCheckbox.Top := 20 ;
90+ EVFCheckbox.Left := 0 ;
91+ EVFCheckbox.Width := Page.SurfaceWidth;
92+ EVFCheckbox.Caption := ' .evf' ;
93+ EVFCheckbox.Checked := False;
94+ EVFCheckbox.Parent := Page.Surface;
95+
96+ RMVCheckbox := TNewCheckbox.Create(Page);
97+ RMVCheckbox.Top := 40 ;
98+ RMVCheckbox.Left := 0 ;
99+ RMVCheckbox.Width := Page.SurfaceWidth;
100+ RMVCheckbox.Caption := ' .rmv' ;
101+ RMVCheckbox.Checked := False;
102+ RMVCheckbox.Parent := Page.Surface;
103+
104+ MVFCheckbox := TNewCheckbox.Create(Page);
105+ MVFCheckbox.Top := 60 ;
106+ MVFCheckbox.Left := 0 ;
107+ MVFCheckbox.Width := Page.SurfaceWidth;
108+ MVFCheckbox.Caption := ' .mvf' ;
109+ MVFCheckbox.Checked := False;
110+ MVFCheckbox.Parent := Page.Surface;
111+ end ;
112+
113+ procedure CurStepChanged (CurStep: TSetupStep);
114+ begin
115+ if CurStep = ssPostInstall then
116+ begin
117+ if not (AVFCheckbox.Checked or EVFCheckbox.Checked or RMVCheckbox.Checked or MVFCheckbox.Checked) then
118+ begin
119+ RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' );
120+ end ;
121+
122+ if AVFCheckbox.Checked then
123+ begin
124+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' ' ,' {#MyAppName}' );
125+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' FriendlyAppName' , ' {#MyAppName}' );
126+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .avf\OpenWithProgids' , ' ' , ' {#MyAppName}.avf' );
127+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .avf' , ' ' ,' {#MyAppName}.avf' );
128+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\DefaultIcon' , ' ' , ExpandConstant(' {app}\media\AVF.ico,0' ));
129+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\shell\open\command' , ' ' , ExpandConstant(' "' + ExpandConstant(' {app}\{#AppPath}\{#MyAppExeName}' ) + ' " "%1"' ));
130+ end
131+ else
132+ begin
133+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .avf\OpenWithProgids' , ' ' );
134+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .avf' , ' ' );
135+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\shell\open\command' );
136+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\DefaultIcon' );
137+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf' );
138+ end ;
139+
140+ if EVFCheckbox.Checked then
141+ begin
142+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' ' ,' {#MyAppName}' );
143+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' FriendlyAppName' , ' {#MyAppName}' );
144+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .evf\OpenWithProgids' , ' ' , ' {#MyAppName}.evf' );
145+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .evf' , ' ' ,' {#MyAppName}.evf' );
146+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\DefaultIcon' , ' ' , ExpandConstant(' {app}\media\EVF.ico,0' ));
147+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\shell\open\command' , ' ' , ExpandConstant(' "' + ExpandConstant(' {app}\{#AppPath}\{#MyAppExeName}' ) + ' " "%1"' ));
148+ end
149+ else
150+ begin
151+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .evf\OpenWithProgids' , ' ' );
152+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .evf' , ' ' );
153+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\shell\open\command' );
154+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\DefaultIcon' );
155+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf' );
156+ end ;
157+
158+ if RMVCheckbox.Checked then
159+ begin
160+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' ' ,' {#MyAppName}' );
161+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' FriendlyAppName' , ' {#MyAppName}' );
162+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .rmv\OpenWithProgids' , ' ' , ' {#MyAppName}.rmv' );
163+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .rmv' , ' ' ,' {#MyAppName}.rmv' );
164+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\DefaultIcon' , ' ' , ExpandConstant(' {app}\media\RMV.ico,0' ));
165+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\shell\open\command' , ' ' , ExpandConstant(' "' + ExpandConstant(' {app}\{#AppPath}\{#MyAppExeName}' ) + ' " "%1"' ));
166+ end
167+ else
168+ begin
169+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .rmv\OpenWithProgids' , ' ' );
170+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .rmv' , ' ' );
171+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\shell\open\command' );
172+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\DefaultIcon' );
173+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv' );
174+ end ;
175+
176+ if MVFCheckbox.Checked then
177+ begin
178+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' ' ,' {#MyAppName}' );
179+ RegWriteStringValue(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' , ' FriendlyAppName' , ' {#MyAppName}' );
180+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .mvf\OpenWithProgids' , ' ' , ' {#MyAppName}.rmv' );
181+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' .mvf' , ' ' ,' {#MyAppName}.mvf' );
182+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\DefaultIcon' , ' ' , ExpandConstant(' {app}\media\MVF.ico,0' ));
183+ RegWriteStringValue(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\shell\open\command' , ' ' , ExpandConstant(' "' + ExpandConstant(' {app}\{#AppPath}\{#MyAppExeName}' ) + ' " "%1"' ));
184+ end
185+ else
186+ begin
187+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .mvf\OpenWithProgids' , ' ' );
188+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .mvf' , ' ' );
189+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\shell\open\command' );
190+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\DefaultIcon' );
191+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf' );
192+ end ;
193+ end ;
194+ end ;
195+ procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep);
196+ begin
197+ if CurUninstallStep = usPostUninstall then
198+ begin
199+ RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ' SOFTWARE\Classes\Applications\{#MyAppExeName}' );
200+
201+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .avf\OpenWithProgids' , ' ' );
202+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .avf' , ' ' );
203+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\shell\open\command' );
204+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf\DefaultIcon' );
205+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.avf' );
206+
207+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .evf\OpenWithProgids' , ' ' );
208+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .evf' , ' ' );
209+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\shell\open\command' );
210+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf\DefaultIcon' );
211+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.evf' );
212+
213+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .rmv\OpenWithProgids' , ' ' );
214+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .rmv' , ' ' );
215+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\shell\open\command' );
216+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv\DefaultIcon' );
217+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.rmv' );
218+
219+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .mvf\OpenWithProgids' , ' ' );
220+ RegDeleteValue(HKEY_CLASSES_ROOT, ' .mvf' , ' ' );
221+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\shell\open\command' );
222+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf\DefaultIcon' );
223+ RegDeleteKeyIncludingSubkeys(HKEY_CLASSES_ROOT, ' {#MyAppName}.mvf' );
224+ end ;
225+ end ;
226+ procedure InitializeWizard ;
227+ begin
228+ FileAssociationPage;
229+ end ;
0 commit comments