杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3088|回复: 0

Setup Factory 简单制作安装包流程

[复制链接]
发表于 2017-2-26 15:24:20 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先创建一个新的项目,然后根据向导填写相关信息。
1.jpg
这里选择安装程序支持的语言,默认为英文,这里我修改成了简体中文。完成向导后,主界面中会导入你工程中所有要打包的文件,若你需要创建应用程序的快捷方式,选中你要创建的应用程序,右键——>文件属性——>快捷方式。
2.jpg
在这里可以选择你需要快捷方式出现的位置,属性中描述属性的内容是创建快捷方式后,快捷方式的命名(不能含有非法字符/  : * ? “ < > |)。图标栏可以为快捷方式自定义图标。
3.jpg
这里介绍两种使用图标的方式:
档案文件:图标文件(.ico)是打包在安装包内的,安装时会一起安装在用户的计算机上。
外部文件:图标文件不打包在安装包内,放置在指定位置进行调用。
这里推荐使用档案文件方式,选择好使用方式后,点击添加文件,加入图标文件,然后选中你所添加的图标文件即可。若是打包的文件中,包含了不想删除的数据文件之类的,可以在高级选项卡中选择永不删除。
4.jpg
这里虽然勾选了永不删除,不过在后面介绍卸载程序部分的时候,有办法在卸载时,询问用户是否卸载用户信息(即永不删除的文件)进行卸载。在屏幕左侧的安装之前中,可以编辑安装前的一些界面。比如用户协议,磁盘需求等。
5.jpg
6.jpg
这次任务主要有一个特殊要求,就是在安装之前检测下之前是否安装,若是安装过,提示卸载后,再次安装。而 Setup Factory 并没有直接的功能,就需要用脚本了。下面介绍一下注册表读写脚本代码首先要创建注册表,点击主界面屏幕左侧屏幕栏中的“安装之后”,找到安装成功屏幕点击编辑,然后选择操作选项卡,然后在On Preload选项卡中编写脚本。
7.jpg
  1. --定义变量(文件后缀名、文件类型、ico 文件名、主程序文件名)
  2. dotname=".vy"
  3. filename="VYExam"
  4. iconame="\\VYExamico"
  5. exename=\\VYExamSys

  6. dotext = Registry.DoesKeyExist(HKEY_CLASSES_ROOT, dotname);
  7. if(dotext) then
  8. else
  9. Registry.CreateKey(HKEY_CLASSES_ROOT, dotname);
  10. end
  11. filext = Registry.DoesKeyExist(HKEY_CLASSES_ROOT, filename);
  12. if(filext) then
  13. else
  14. Registry.CreateKey(HKEY_CLASSES_ROOT, filename);
  15. Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\DefaultIcon");
  16. Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\shell");
  17. Registry.CreateKey(HKEY_CLASSES_ROOT, filename.."\shell\open");
  18. Registry.CreateKey(HKEY_CLASSES_ROOT,filename.."\shell\open\command");
  19. End

  20. Registry.SetValue(HKEY_CLASSES_ROOT,dotname, "", filename, REG_SZ);
  21. --注册文件类型
  22. result = SessionVar.Expand("%AppFolder%");
  23. --将安装路径展开
  24. Registry.SetValue(HKEY_CLASSES_ROOT, filename, "", filename, REG_SZ);
  25. Registry.SetValue(HKEY_CLASSES_ROOT, filename, "BrowserFlags",00000008, REG_DWORD);
  26. Registry.SetValue(HKEY_CLASSES_ROOT, filename, "EditFlags", 00000000,REG_DWORD);
  27. Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\DefaultIcon", "",result..iconame..".ico,0", REG_SZ);
  28. Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\shell", "", "Open",REG_SZ);
  29. Registry.SetValue(HKEY_CLASSES_ROOT, filename.."\shell\open", "", "打开", REG_SZ);
  30. --ico 图标指定(.. 为字符串连接符)
  31. Registry.SetValue(HKEY_CLASSES_ROOT,filename.."\shell\open\command", "", """..result..exename..".exe"%1", REG_SZ);
  32. --exe 程序指定

  33. --创建软件注册表项
  34. --检测子项集是否存在

  35. softname=SessionVar.Expand("%ProductName%");
  36. --这里注册表的路径可以修改的。
  37. Reg_soft="Software\\huiyi\"..softname;

  38. result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\huiyi");
  39. if (result) then
  40. else
  41. Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\huiyi");
  42. end
  43. --创建本程序注册表项
  44. Appfile=SessionVar.Expand("%AppFolder%");
  45. Registry.CreateKey(HKEY_LOCAL_MACHINE, Reg_soft);
  46. Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "InstallPath", Appfile,1);
  47. Uninfile=SessionVar.Expand("%AppFolder%\Uninstall\uninstall.exe "/U:%AppFolder%\Uninstall\uninstall.xml"");
  48. Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "Uninstaller",Uninfile, 1);
  49. Version=SessionVar.Expand("%ProductVer%");
  50. Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "Version", Version, 1);
复制代码

然后安装前读取注册表信息进行检测,点击主界面左侧操作栏中的“关于启动安装”进行脚本编写。
8.jpg
  1. softname=SessionVar.Expand("%ProductName%");
  2. Reg_soft="Software\\huiyi\"..softname;
  3. version2=SessionVar.Expand("%ProductVer%");
  4. result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft);
  5. if (result) then
  6.     version1=Registry.GetValue(HKEY_LOCAL_MACHINE,Reg_soft,"Version",true);
  7.     if (version1>version2) then
  8.         msgBTN = Dialog.Message(softname,'提示:此机已安装本软件最新版本! 点击“确定”,退出本安装程序。',MB_OK,MB_ICONINFORMATION,MB_DEFBUTTON1);
  9.         if (msgBTN==IDOK) then
  10.         Application.Exit();
  11.         end
  12.     elseif (version1==version2) then
  13.         msgBTN = Dialog.Message(softname,'提示:此机已安装本软件,是否重新安装? 点击“是”,卸载并安装;点击“否”,退装出安。',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
  14.     elseif (version1<version2) then
  15.         msgBTN = Dialog.Message(softname,'提示:此机已安装本软件旧版本,是否卸载并安装新版本? 点击“是”,卸载并安装;点击“否“,退出安装',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
  16.     end
  17.     if (msgBTN == IDYES) then
  18.         result = Registry.GetValue(HKEY_LOCAL_MACHINE,Reg_soft,"Uninstaller",true);
  19.         File.Run(result,"","",SW_SHOWNORMAL,true);
  20.         result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft);
  21.         if (result) then
  22.             msgBTN2=Dialog.Message(softname,'卸载未完成!是否继续安装? 点击“是”继续安装;点击“否”,退出安装。',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
  23.             if (msgBTN2==IDYES) then
  24.             elseif (msgBTN2==IDNO) then
  25.                 Application.Exit();
  26.             end
  27.         end
  28.     elseif(msgBTN==IDNO) then
  29.         Application.Exit();
  30.     end
  31. else
  32. end
复制代码

最后卸载部分删除注册表,点击主界面左侧卸载栏中的“屏幕”,点击“After Uninstalling”选项卡,然后选中卸载成功屏幕,点击编辑。然后选择“操作”选项卡,在“On Preload”选项卡中进行编辑脚本。
9.jpg
  1. dotname=".vy"
  2. filename="VYExam"
  3. softname=SessionVar.Expand("%ProductName%");
  4. Reg_soft="Software\\huiyi\"..softname;
  5. Registry.DeleteKey(HKEY_CLASSES_ROOT, dotname);
  6. Registry.DeleteKey(HKEY_CLASSES_ROOT, filename);
  7. Registry.DeleteKey(HKEY_LOCAL_MACHINE, Reg_soft);
  8. result = Registry.GetKeyNames(HKEY_LOCAL_MACHINE, "Software\huiyi");
  9. if (result==NIL) then
  10. Registry.DeleteKey(HKEY_LOCAL_MACHINE, "Software\huiyi");
  11. End
复制代码

最后,若是需要询问用户是否删除用户信息(即不可删除的文件),可在后面加一段代码。
  1. msgBTN = Dialog.Message(softname,'是否删除用户信息?',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1)
  2. if (msgBTN == IDYES) then
  3. if (Folder.DoesExist("%AppFolder%")) then
  4. Folder.DeleteTree("%AppFolder%");
  5. end
  6. end
复制代码

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





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-7 20:53 , Processed in 0.126052 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表