zoukankan      html  css  js  c++  java
  • .NET第三方打包工具(Setup Factory)常用手册

    前言:工具就像乐高,你不必研究它到底能拼出多少模型,只需要研究哪些模块可以拼出你想到的。

    SetupFactory简介

    这是(蓝玫瑰)公司开发的一套打包-补丁解决方案的打包工具,使用范围广、简便好用、自定义程度高、又兼顾了默认简单打包的效果,
    更是设计了一套自主的脚本开发语言,完全实现了我们日常需求的所有幻想。

    1. 安装

    安装部分请自行下载,大多附带安装教程-下一步-完成。
    注意事项:踩坑过程中下载了一款汉化的中文版9.5.3软件有BUG,Action的功能,设置的脚本无效,不能执行(后面会提到),建议安装英文版。

    2. 创建项目

    2.1. 打开Setupfactory

    这里新开始,我们就选择第一项:创建新项目,点【OK】,一般默认打开上一次的项目。如下图:

    2.2.输入信息

    这里的信息包含公司、软件名、版本,网址等,会显示在本机的程序列表里,如下图:

    2.3. 根据安装环境选择平台

    2.4.选择打包程序的运行文件夹

    如果有子文件夹,如图打勾

    2.5.选择多语言并设置默认语言

    之前的向导、风格,连续【下一步】。
    在安装时,如果没有选择语言的界面,会按照默认语言提示消息,如果有选择语言的界面,会按照相应语言提示消息。

    2.6.选择.net框架

    如果选择了对应的框架,需要在SetupFactor安装目录的Dependencies里增加相应的安装包,否则打包时报错。比如选择了.net 4.0:

    2.7.创建完成

    连续【下一步】,前面选择的安装文件都被加载进来了。

    3. 打包设置

    添加完安装文件列表,就需要对左侧的功能菜单,做一些操作了。

    3.1.Files,主要是对打包文件的一些增删操作


    在EditFileProperties中,一般有两个界面需要修改,主要针对执行程序.exe,主要是同目录重复安装时,是否覆盖的问题

    设置图标和快捷方式的位置,比如桌面、开始菜单、任务栏等

    3.2 Settings

    这个功能就是我们之前在创建项目时录入的信息,可以在这里更改,比如版本信息,系统要求,日志也是默认的追加。当然还有密钥和使用期限,这里项目没用到,如有需要,可自行研究,以后用到再来补充。

    3.3 Screens

    主要分为主题、安装前、安装中、安装后四小节,主要时我们一般的安装过程中的弹窗步骤和内容。
    安装前有一些默认的步骤,比如欢迎界面、许可证界面、密钥、用户信息、安装路径、快捷方式权限等,当然也有自定义的界面,则需要用到脚本了。可以设置每一幕的顺序,也可以增删一些步骤,并且每一幕都可以编辑。每一幕的编辑界面又分为:
    Settings:主要是界面的显示内容编辑,比如欢迎界面,改写成自己公司的话术,许可证等内容。
    Actions:操作脚本,这里又分了加载前,点击帮助、返回、下一步、取消等按钮的一些操作,常用都不需要修改。

    3.4 Action

    刚才我们说到Screens的每一小节在编辑时都有一个Action,那是指当前步骤的一些操作Action,这里的Action指整个安装EXE的Action,主要有开始时(运行exe,但没显示Screens中的欢迎界面(我把欢迎设置成第一步))、安装前(Ready Install)、安装失败、安装后、关闭时。

    由于我们需要在安装前检测是否已经安装过本软件,如果安装了就先卸载(当然也可以直接覆盖).检测是否安装也有很多方法,比如安装目录是否存在(但是这个不太靠谱,毕竟安装目录可以选,除非前面的Screens里删掉选择安装目录,并且设置默认安装目录),还是采取注册表比较可靠。思路是这样的,在运行后,检测注册表是否存在键值,再获取数据,再验证路径和卸载文件是否存在,再卸载。在卸载完后,删除注册表键值。在新安装完,再在注册表写入新的安装信息。
    运行时脚本:

    --检测注册表是否存在键值
    existkey = Registry.DoesKeyExist(HKEY_CURRENT_USER, "Software\zybio\akpath");
    
    if (existkey) then
    	-- 询问是否卸载,这里也可以改成 卸载、覆盖、取消三选项的弹窗,如果有覆盖选项,要考虑新安装路径和旧安装路径是否一致的问题,这里采用的是直接卸载
    	dresult = Dialog.Message("提示", "检测到已安装本软件,是否先卸载?", MB_OKCANCEL, MB_ICONINFORMATION, MB_DEFBUTTON1);
    	--返回点击的按钮值
    if (dresult ==1) then
    	-- 如果是卸载,就读取数据,安装路径和卸载文件路径
    	resultpath = Registry.GetValue(HKEY_CURRENT_USER, "Software\zybio\akpath", "akpathvalue", true);
    	resultfile = Registry.GetValue(HKEY_CURRENT_USER, "Software\zybio\akfile", "akfilevalue", true);
    	--判断路径和文件是否存在,否则如果注册表有值,但是文件不存在,会报错
    	existpath = Folder.DoesExist(resultpath);
    	existfile = File.DoesExist(resultfile);
    	if (existpath and existfile) then
    	-- 执行卸载
    	resulttest = Shell.Execute(resultfile, "open", "/U:Uninstall/uninstall.xml", resultpath, SW_SHOWNORMAL, true);
    	--加一个延时
    	Application.Sleep(200);
    	end
    else
    	-- 如果点击取消,就弹退出框
    	Application.Exit(EXIT_REASON_USER_ABORTED);
    end
    end
    

    图:

    安装后脚本:

    --往注册表写键值
    Registry.CreateKey(HKEY_CURRENT_USER, "Software\zybio\akfile");
    Registry.SetValue(HKEY_CURRENT_USER, "Software\zybio\akfile", "akfilevalue", SessionVar.Expand("%AppFolder%\uninstall.exe"), REG_SZ);
    
    Registry.CreateKey(HKEY_CURRENT_USER, "Software\zybio\akpath");
    Registry.SetValue(HKEY_CURRENT_USER, "Software\zybio\akpath", "akpathvalue", SessionVar.Expand("%AppFolder%"), REG_SZ);
    

    图:

    卸载时脚本:

    --删除键值,如果公司有多个产品,不建议删除上级目录,只删除本软件相关键即可。
    Registry.DeleteKey(HKEY_CURRENT_USER, "Software\zybio\akpath");
    Registry.DeleteKey(HKEY_CURRENT_USER, "Software\zybio\akfile");
    

    图:

    当然了,刚才Action里可没卸载相关的步骤啊,那是在接下来的卸载功能里,Action里的就到这里了。

    3.5 Resource

    主要是一些资源环境之类的需要安装的内容,比如mysql等附带程序,项目没用到,如果有需要的,自行研究脚本,如果以后用到,再来补充。

    3.6 Uninstall


    卸载主要有两个设置点,设置静默卸载和前面讲到的,卸载时删除注册表等操作。

    4.打包设置和打包

    如图中的build settings和build,设置中主要是图中的安装包图标设置,在前面的文件属性设置中也有一个图标设置,那是执行文件其他默认即可。然后打包,就完成了。

    预告

    下一篇是兄弟篇 补丁工具(Visual Patch)常用手册……

    我很平凡
    没有过人的天分
    没有命运的恩宠
    世界不公平。

    但我知道
    有一个倔强的我
    不甘平庸
    渴望自由
    潜能无限

    我相信
    只要执着和努力
    总有一天
    让世界的不公平
    在我面前低头!
  • 相关阅读:
    javascript之Number
    javascript之window对象
    javascript全局对象
    javascript之尺寸,位置,溢出
    javascript之DOM操作
    javascript之全局函数
    javascript之Error
    javascript之url转义escape()、encodeURI()和decodeURI()
    javascript之Boolean
    javascript之Arguments
  • 原文地址:https://www.cnblogs.com/kafeibuhuizui/p/15175977.html
Copyright © 2011-2022 走看看