setup factory
优点:支持大于2G的安装包打包(Inno Setup,NSIS不支持)。
缺点:原来的界面控件不能在基础上修改,只能自定义custom的对话框,但是脚本都需要自己编写,比较繁琐,只能参考用户文档和google揣摩了,下面是自己实际项目弄的一些lua脚本内容,以供参考。
1.自定义界面,然后编写脚本
OnPreload脚本: 
-- These actions are performed before the screen is shown.
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_01, {Checked = false});
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_02, {Checked = true});
--DlgRadioButton.SetProperties(CTRL_BUTTON_NEXT, {Enabled = false});
g_LicenseAgreementScreen_UpdateNextButton();
--用于捕获键盘事件
Screen.SetFocus(CTRL_EDIT_01);
2.捕获键盘事件
-- These actions are triggered by the controls on the screen.
--处理点击事件
if ( e_MsgID == MSGID_CLICKED ) then
if (e_CtrlID == CTRL_RADIO_BUTTON_01) then
-- id可以进来,g_LicenseAgreementScreen_UpdateNextButton不能从灰色变高亮
DlgButton.SetProperties(CTRL_BUTTON_NEXT, {Enabled = true});
--需要重置控件
Screen.SetFocus(CTRL_EDIT_01);
end
if (e_CtrlID == CTRL_RADIO_BUTTON_02) then
DlgButton.SetProperties(CTRL_BUTTON_NEXT, {Enabled = false});
--需要重置控件
Screen.SetFocus(CTRL_EDIT_01);
end
end
--处理键盘事件,添加了一个CTRL_EDIT_01不可见类型的控件支持的
if (e_MsgID == MSGID_ONCHANGED ) then
local tEditProperty = DlgEditField.GetProperties (CTRL_EDIT_01);
local strInputValue = tEditProperty.Text;
--调试用
--Debug.ShowWindow(true);
--Debug.Print("enter key board str: "..strInputValue.."\n");
local asciiCode = string.byte(strInputValue);
if(asciiCode == nil) then -- 避免为nil报错
asciiCode = 0;
end
--Debug.Print("enter key board value: "..asciiCode.."\n");
--1). A,a按键被按下
if(asciiCode == 65 or asciiCode == 97) then
DlgButton.SetProperties(CTRL_BUTTON_NEXT, {Enabled = true});
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_01, {Checked = true});
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_02, {Checked = false});
end
-- 2). D,d按键被按下
if(asciiCode == 68 or asciiCode == 100) then
DlgButton.SetProperties(CTRL_BUTTON_NEXT, {Enabled = false});
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_01, {Checked = false});
DlgRadioButton.SetProperties(CTRL_RADIO_BUTTON_02, {Checked = true});
end
-- 3).界面上的B,N,C按键的支持
-- B,b按键
if(asciiCode == 66 or asciiCode == 98) then
Screen.Back();
end
-- enter被按下或N,n按键被按下,且下一步高亮时候
local tButtonProperty = DlgButton.GetProperties(CTRL_BUTTON_NEXT);
local bNDown = (asciiCode == 78 or asciiCode == 110);
if((asciiCode == 13 or bNDown) and tButtonProperty.Enabled ) then
Screen.Next();
end
-- C,c按键
if(asciiCode == 67 or asciiCode == 99) then
if g_ConfirmSetupAbort() then
Application.Exit(EXIT_REASON_USER_ABORTED);
end
end
--重置控件内容为空
tEditProperty.Text = "";
DlgEditField.SetProperties (CTRL_EDIT_01,  tEditProperty);
end
3.设置安装路径
-- These actions are performed before the screen is shown.
--用于捕获键盘事件
Screen.SetFocus(CTRL_EDIT_02);
--安装到默认空间最大的盘
function GetSpaceMaxDriver()
local Drives = Drive.Enumerate();
local nFindDriver = "";
local nSpaceMax = 0;
for key, value in pairs(Drives) do
local nCurSpace = Drive.GetFreeSpace(value);
if nSpaceMax == 0 then
nSpaceMax = nCurSpace;
nFindDriver = value;
else
if nSpaceMax < nCurSpace then
nSpaceMax = nCurSpace;
nFindDriver = value;
end
end
end
return nFindDriver;
end
--第一次才进来设置,后面返回的不再进行设置
local tEditProperty = DlgEditField.GetProperties (CTRL_EDIT_01);
if tEditProperty.Text == "" then
tEditProperty.Text = GetSpaceMaxDriver();
tEditProperty.Text = tEditProperty.Text..SessionVar.Expand("%ProductName%");
DlgEditField.SetProperties(CTRL_EDIT_01, tEditProperty);
--设置app安装的路径
SessionVar.Set("%AppFolder%",tEditProperty.Text);
end
-- 选择路径对话框,浏览文件夹
local target_folder = Dialog.FolderBrowse("Select a Folder", "C:\\");
-- 返回了正确的路径才更新
if (target_folder ~= "CANCEL") and (target_folder ~= "") then
local tEditProperty = DlgEditField.GetProperties (CTRL_EDIT_01);
tEditProperty.Text = target_folder..SessionVar.Expand("%ProductName%");
DlgEditField.SetProperties(CTRL_EDIT_01, tEditProperty);
SessionVar.Set("%AppFolder%",tEditProperty.Text);
end

setup factory打包工具的使用相关推荐

  1. Setup Factory 打包工具部分功能代码解

    Setup Factory 打包工具部分功能代码解 Application.Exit 退出安装程序,并返回一个可选的返回代码.Application.GetInstallLanguage 返回一个包含 ...

  2. setup factory 打包VB 工程

    setup factory 使用起来很简单 你可以如下: 1.你把你刚编译出来的exe和相关的资源文件复制到某一空目录下.把exe文件添加到setup factory里之后,在列表里右键,属性里面可以 ...

  3. Setup Factory打包注册dll

    1.生成一个Setup Factory工程,按照向导生成即可 2.添加dll到工程中 3.判断原有文件夹下是否有该文件,如果有删除.在On Pre Install中添加代码,改代码是通过Add Act ...

  4. Setup Factory打包时实现第三方DLL文件的注册

    Setup Factory中的如下界面: 红色矩形中的仅仅是用来测试该文件是否是能注册的组件或ocx控件,在安装包安装过程中并不会注册该组件,如需注册,必须按下面步骤进行: 1: 先将需要注册的组件所 ...

  5. 用Setup Factory打包Visual C++ 2008开发的程序心得总结

    1:按文件的依赖顺序将文件添加到set Factory中,注意:必须按依赖顺序       添加文件,否则组件注册会不成功. 2:然后按照博文http://blog.163.com/danshimin ...

  6. Python 之打包工具 setup.py

    1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是 打包. 打包,就是将你 ...

  7. 常用的软件打包工具Inno Setup和AdvancedInstallerPortable

    文章目录 一.Inno Setup 打包工具 二.AdvancedInstallerPortable 打包工具 今天遇到一个问题一个朋友问我有没有什么好用的软件打包工具.我给他说我常用的两个打包软件I ...

  8. VS2017安装打包工具;以及无法加载此项目,setup(不兼容),该应用程序未安装、MFC的使用

    感谢分享 VS2017安装打包工具,相比Installshield好用吧 下载 1.打开VS2017,工具--->扩展和更新-->联机-->搜索--->Microsoft Vi ...

  9. Windows EXE打包工具Inno Setup

    Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件.Inn ...

最新文章

  1. 【jQuery】如何用jQuery实现鼠标移入后改变背景颜色
  2. js--webSocket入门
  3. 解决Word 2013, Word 2016的保存太慢的问题
  4. 编译Android 4.0 ICS注意事项
  5. 既然是青春,怎么能错过?唯一理由只缺1张免费票!
  6. addeventlistener不支持ajax_十万个Web前端面试题之AJAX、axios、fetch的区别
  7. 光盘刻录只允许读取不能拷贝_原来 8 张图,就可以搞懂「零拷贝」了
  8. oracle参数文件和口令文件
  9. “哪吒”出世!华为开源中文版BERT模型
  10. Spring Servlet 拦截器 过滤器
  11. 如何用bat批处理编译swf项目
  12. 四线温度探头怎么接线_热电阻的接线方式
  13. 广州地铁线路查询程序C语言,c语言广州地铁系统报错,帮帮忙看一看哈?
  14. txt数据文件的读写操作
  15. NPN PNP 的区别
  16. 常见分布式应用系统设计图解(十二):证券交易系统 | 极客分享第 12 期
  17. Sliver RecyclerView 功能最强大、最好用的适配器
  18. 编写lisp程序解一元二次方程_vb解一元二次方程代码
  19. DVE C++ 中批量注释快捷键 Ctrl + /
  20. 【暗时间】摘录 - 为什么你应该从现在开始就写博客

热门文章

  1. c语言字符怎么运算,c语言运算符号(c语言如何输入运算符号)
  2. word2vec(2) 背景知识
  3. Android进阶——Preference详解之Preference系的基本应用(三)
  4. Visual Studio 2008 安装出错 无法安装 的解决办法
  5. Maven Scope 讲解
  6. 资金流入流出预测(上)(阿里云天池大赛)
  7. 视频照片合成软件哪个好?快速把手机照片做成视频,简单操作,效果精美!
  8. 信息传递(tarjan算法)
  9. docker多容器操作与强制删除容器的方法步骤
  10. 大数据分析 | 用 Python 做文本词频分析