Inno setup Inno安装程序仅卸载某些组件
对于安装在同一文件夹中的每个不同零售产品,我都有一个通用的应用程序(如媒体播放器),即 C:\ProgramFiles\myapp 而不同的内容(如电影)都安装在同一个文件夹中 C:\ProgramFiles\myapp\movies 对于每个单独的安装(单独的零售产品),我只需创建一个快捷方式,用特定的内容打开应用程序,如Inno setup Inno安装程序仅卸载某些组件,inno-setup,uninstallation,pascalscript,Inno Setup,Uninstallation,Pascalscript,对于安装在同一文件夹中的每个不同零售产品,我都有一个通用的应用程序(如媒体播放器),即 C:\ProgramFiles\myapp 而不同的内容(如电影)都安装在同一个文件夹中 C:\ProgramFiles\myapp\movies 对于每个单独的安装(单独的零售产品),我只需创建一个快捷方式,用特定的内容打开应用程序,如mediaplayer-f movie1.mp4,但它可以从相同的环境打开所有其他内容 在我的例子中,问题是卸载。Inno安装程序不支持选择要卸载的组件 我的策略(当时我的想
mediaplayer-f movie1.mp4
,但它可以从相同的环境打开所有其他内容
在我的例子中,问题是卸载。Inno安装程序不支持选择要卸载的组件
我的策略(当时我的想法)是向用户提供一个自定义表单,以选择要卸载的内容。比如说
[X] Main Application
[X] Movie1 Full Title Description
[X] Movie2 Full Title Description
[X] Movie3 Full Title Description
通过这种方式,通用卸载将适用于每个单独的零售安装
问题是:
电影
,以查找所有已安装的内容,即电影1.mp4
,电影2.mp4
致以最诚挚的问候。Inno安装程序不支持部分卸载 卸载完成后,整个应用程序以及所有已安装的组件(电影)将被删除 您可以做的是在
初始化安装
中显示带有电影列表的自定义表单。如果用户选择仅卸载(部分)电影,而不卸载整个应用程序(查看器),则可以使用自己的代码删除电影并中止卸载(通过从初始化安装中返回False
)。如果用户选择卸载所有内容,则让卸载完成
函数InitializeUninstall():布尔值;
变量
表格:TSetupForm;
确定按钮、取消按钮:TNewButton;
CheckListBox:TNewCheckListBox;
一、 计数,已删除:整数;
FindRec:TFindRec;
MoviePath:string;
电影:停机坪;
开始
MoviePath:=ExpandConstant(“{app}\movies\”);
计数:=0;
如果FindFirst(MoviePath+'*',FindRec),则
开始
尝试
重复
如果FindRec.Attributes和FILE_ATTRIBUTE_DIRECTORY=0,则
开始
公司(计数);
设置阵列长度(电影、计数);
电影[Count-1]:=FindRec.Name;
结束;
直到没有FindNext(FindRec);
最后
FindClose(FindRec);
结束;
结束;
如果计数=0,则
开始
日志('未发现正在进行完全卸载的电影');
结果:=真;
结束
其他的
开始
日志(格式('找到%d部电影',[Count]);
表单:=CreateCustomForm();
尝试
Form.ClientWidth:=ScaleX(350);
Form.ClientHeight:=ScaleY(250);
表单.标题:=“卸载”;
形式、位置:=poDesktopCenter;
CheckListBox:=TNewCheckListBox.Create(表单);
CheckListBox.Parent:=表单;
CheckListBox.Left:=ScaleX(10);
CheckListBox.Width:=Form.ClientWidth-2*CheckListBox.Left;
CheckListBox.Top:=ScaleY(10);
复选框。高度:=
Form.ClientHeight-ScaleY(23+10+10+CheckListBox.Top);
CheckListBox.AddCheckBox(
'卸载查看器和所有电影','',0,真,真,真,真,零);
对于I:=0进行计数-1 do
开始
AddCheckBox(电影[I],'',1,真,真,假,真,零);
结束;
确定按钮:=TNewButton.Create(表单);
OKButton.Parent:=表单;
宽度:=ScaleX(75);
确定按钮高度:=ScaleY(23);
OKButton.Left:=Form.ClientWidth-ScaleX(75+6+75+10);
OKButton.Top:=Form.ClientHeight-ScaleY(23+10);
OK按钮。标题:=“OK”;
OKButton.ModalResult:=mrOk;
OK按钮。默认值:=True;
CancelButton:=TNewButton.Create(表单);
CancelButton.Parent:=表单;
CancelButton.Width:=OKButton.Width;
CancelButton.Height:=OKButton.Height;
CancelButton.Left:=OKButton.Left+OKButton.Width+ScaleX(6);
CancelButton.Top:=OKButton.Top;
取消按钮。标题:=“取消”;
CancelButton.ModalResult:=mrCancel;
CancelButton.Cancel:=True;
Form.ActiveControl:=复选框;
如果Form.ShowModal()mrOk,则
开始
日志(“用户已取消卸载”);
结果:=假;
结束
其他的
开始
如果CheckListBox.State[0]=cbChecked,则
开始
日志(“用户选择完成卸载”);
结果:=真;
结束
其他的
开始
对于I:=0进行计数-1 do
开始
如果CheckListBox.Checked[I+1],则
开始
如果删除文件(MoviePath+Movies[I]),则
开始
公司(已删除);
日志(格式(‘已删除的电影%s’,[Movies[I]]);
结束
其他的
开始
MsgBox(格式('Error deleting%s',[Movies[I]]),mbError,MB_OK);
结束;
结束;
结束;
MsgBox(格式(‘已删除%d部电影’,[Deleted]),MB信息,MB_OK);
结果:=假;
结束;
结束;
最后
Form.Free();
结束;
结束;
结束;
Inno安装程序不支持部分卸载
卸载完成后,整个应用程序以及所有已安装的组件(电影)将被删除
您可以做的是在初始化安装
中显示带有电影列表的自定义表单。如果用户选择仅卸载(部分)电影,而不是整个应用程序(查看器),则可以使用自己的代码删除电影并中止卸载a