SetupFactory简单制作安装包流程

来源:互联网 发布:java从入门到精通 光盘 编辑:程序博客网 时间:2024/05/29 04:48
最近让我给项目做安装包,小白一个,开始找各种安装包打包工具。有的简单,但是功能差点意思,有的功能很强大,但是略复杂而且有的还收费。就发现SetupFactory(安装工厂),这个工具还挺好用,操作简洁,功能还算不错。废话不多说,直接上流程。首先给一个SetupFactory9.0.3.0中文版的资源http://download.csdn.net/detail/lannister666/9623922首先创建一个新的项目,然后根据向导填写相关信息。

这里写图片描述
这里选择安装程序支持的语言,默认为英文,这里我修改成了简体中文。

完成向导后,主界面中会导入你工程中所有要打包的文件,若你需要创建应用程序的快捷方式,选中你要创建的应用程序,右键——>文件属性——>快捷方式。

这里写图片描述

在这里可以选择你需要快捷方式出现的位置,属性中描述属性的内容是创建快捷方式后,快捷方式的命名(不能含有非法字符/ \ : * ? “ < > |)。图标栏可以为快捷方式自定义图标。

这里写图片描述

这里介绍两种使用图标的方式:
档案文件:图标文件(.ico)是打包在安装包内的,安装时会一起安装在用户的计算机上。
外部文件:图标文件不打包在安装包内,放置在指定位置进行调用。
这里推荐使用档案文件方式,选择好使用方式后,点击添加文件,加入图标文件,然后选中你所添加的图标文件即可。

若是打包的文件中,包含了不想删除的数据文件之类的,可以在高级选项卡中选择永不删除。

这里写图片描述
这里虽然勾选了永不删除,不过在后面介绍卸载程序部分的时候,有办法在卸载时,询问用户是否卸载用户信息(即永不删除的文件)进行卸载。

在屏幕左侧的安装之前中,可以编辑安装前的一些界面。比如用户协议,磁盘需求等。

这里写图片描述
这里写图片描述

这次任务主要有一个特殊要求,就是在安装之前检测下之前是否安装,若是安装过,提示卸载后,再次安装。而SetupFactory并没有直接的功能,就需要用脚本了。下面介绍一下注册表读写脚本代码首先要创建注册表,点击主界面屏幕左侧屏幕栏中的“安装之后”,找到安装成功屏幕点击编辑,然后选择操作选项卡,然后在On Preload选项卡中编写脚本。

这里写图片描述

--定义变量(文件后缀名、文件类型、ico 文件名、主程序文件名)dotname=".vy"filename="VYExam"iconame="\\\\VYExamico"exename=\\\\VYExamSysdotext = Registry.DoesKeyExist(HKEY_CLASSES_ROOT, dotname);if(dotext) thenelseRegistry.CreateKey(HKEY_CLASSES_ROOT, dotname);endfilext = Registry.DoesKeyExist(HKEY_CLASSES_ROOT, filename);if(filext) thenelseRegistry.CreateKey(HKEY_CLASSES_ROOT, filename);Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\\DefaultIcon");Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\\shell");Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\\shell\\open");Registry.CreateKey(HKEY_CLASSES_ROOT,filename.."\\shell\\open\\command");EndRegistry.SetValue(HKEY_CLASSES_ROOT,dotname, "", filename, REG_SZ);--注册文件类型result = SessionVar.Expand("%AppFolder%");--将安装路径展开Registry.SetValue(HKEY_CLASSES_ROOT, filename, "", filename, REG_SZ);Registry.SetValue(HKEY_CLASSES_ROOT, filename, "BrowserFlags",00000008, REG_DWORD);Registry.SetValue(HKEY_CLASSES_ROOT, filename, "EditFlags", 00000000,REG_DWORD);Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\\DefaultIcon", "",result..iconame..".ico,0", REG_SZ);Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\\shell", "", "Open",REG_SZ);Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\\shell\\open", "", "打开", REG_SZ);--ico 图标指定(.. 为字符串连接符)Registry.SetValue(HKEY_CLASSES_ROOT,filename.."\\shell\\open\\command", "", "\""..result..exename..".exe\"%1", REG_SZ);--exe 程序指定--创建软件注册表项--检测子项集是否存在softname=SessionVar.Expand("%ProductName%");--这里注册表的路径可以修改的。Reg_soft="Software\\\\huiyi\\\\"..softname;result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\huiyi");if (result) thenelseRegistry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\huiyi");end--创建本程序注册表项Appfile=SessionVar.Expand("%AppFolder%");Registry.CreateKey(HKEY_LOCAL_MACHINE, Reg_soft);Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "InstallPath", Appfile,1);Uninfile=SessionVar.Expand("%AppFolder%\\Uninstall\\uninstall.exe \"/U:%AppFolder%\\Uninstall\\uninstall.xml\"");Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "Uninstaller",Uninfile, 1);Version=SessionVar.Expand("%ProductVer%");Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "Version", Version, 1);
然后安装前读取注册表信息进行检测,点击主界面左侧操作栏中的“关于启动安装”进行脚本编写。

这里写图片描述

softname=SessionVar.Expand("%ProductName%");Reg_soft="Software\\\\huiyi\\\\"..softname;version2=SessionVar.Expand("%ProductVer%");result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft);if (result) then    version1=Registry.GetValue(HKEY_LOCAL_MACHINE,Reg_soft,"Version",true);    if (version1>version2) then        msgBTN = Dialog.Message(softname,'提示:此机已安装本软件最新版本!\r\n\r\n 点击“确定”,退出本安装程序。',MB_OK,MB_ICONINFORMATION,MB_DEFBUTTON1);        if (msgBTN==IDOK) then        Application.Exit();        end    elseif (version1==version2) then        msgBTN = Dialog.Message(softname,'提示:此机已安装本软件,是否重新安装?\r\n\r\n 点击“是”,卸载并安装;点击“否”,退装出安。',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);    elseif (version1<version2) then        msgBTN = Dialog.Message(softname,'提示:此机已安装本软件旧版本,是否卸载并安装新版本?\r\n\r\n 点击“是”,卸载并安装;点击“否“,退出安装',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);    end    if (msgBTN == IDYES) then        result = Registry.GetValue(HKEY_LOCAL_MACHINE,Reg_soft,"Uninstaller",true);        File.Run(result,"","",SW_SHOWNORMAL,true);        result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft);        if (result) then            msgBTN2=Dialog.Message(softname,'卸载未完成!是否继续安装?\r\n\r\n 点击“是”继续安装;点击“否”,退出安装。',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);            if (msgBTN2==IDYES) then            elseif (msgBTN2==IDNO) then                Application.Exit();            end        end    elseif(msgBTN==IDNO) then        Application.Exit();    endelseend

最后卸载部分删除注册表,点击主界面左侧卸载栏中的“屏幕”,点击“After Uninstalling”选项卡,然后选中卸载成功屏幕,点击编辑。然后选择“操作”选项卡,在“On Preload”选项卡中进行编辑脚本。

这里写图片描述

dotname=".vy"filename="VYExam"softname=SessionVar.Expand("%ProductName%");Reg_soft="Software\\\\huiyi\\\\"..softname;Registry.DeleteKey(HKEY_CLASSES_ROOT, dotname);Registry.DeleteKey(HKEY_CLASSES_ROOT, filename);Registry.DeleteKey(HKEY_LOCAL_MACHINE, Reg_soft);result = Registry.GetKeyNames(HKEY_LOCAL_MACHINE, "Software\\huiyi");if (result==NIL) thenRegistry.DeleteKey(HKEY_LOCAL_MACHINE, "Software\\huiyi");End

最后,若是需要询问用户是否删除用户信息(即不可删除的文件),可在后面加一段代码。

msgBTN = Dialog.Message(softname,'是否删除用户信息?',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1)if (msgBTN == IDYES) thenif (Folder.DoesExist("%AppFolder%")) thenFolder.DeleteTree("%AppFolder%");endend

这样不管是不可删除文件,还是运行程序以后生成的文件都会删除。

1 0
原创粉丝点击