接上一篇 继续使用上一篇的project 。将archive里无用的文件删除 添加我们需要的文件进来。
config是一个文本文件。 注意所有文件的 destination都是 %appfolder% ,这代表程序 安装目录 setupfactory有很多这样的 全局变量 用起来非常方便 ,获取系统环境桌面目录 %desktop% 。 这类似 win批处理命令的%windir%
我们把目录改一下 %appfolder%\tools,这样安装时就可再创建子文件夹tools。
我们确确实实 想定义一个我们自己独有的 用户体验好的 安装包 ,我们不想千篇一律。
在screens ->before installing 选项卡:
把welcome to setup 删掉,然后在license agreement编写我们自己的 安装许可文本:
我们需要自定义一个对话框界面 用来让用户在安装过程中进行配置。在安装时也将针对用户的配置进行相应的处理。
添加一个我们自定义的安装配置界面:
User information ,Select shortcut folder 两屏也一并删掉。
在创建custom Screen的时候 “下一步”按钮的 脚本(单击 screens ->before installing -> 选中custom ->ecit->actions- >On Next 选项卡):
1 -- These actions are performed when the Next button is clicked.
2 -- advance to the next screen
3 --采集数据 并放到全局变量里
4 --端口
5 port = DlgEditField.GetProperties(CTRL_EDIT_01).Text;
6 --启动菜单加快捷方式
7 startup = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_01).Checked;
8 --桌面快捷方式
9 desktop = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_02).Checked;
10 --%StartupFolder%
11 runnow = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_03).Checked;
12 --是否有加密狗
13 softkey=DlgCheckBox.GetProperties(CTRL_CHECK_BOX_04).Checked;
14 --Dialog.Message("title ddf",txport.Text);
15 Screen.Next();
这个很简单 就是获取几个控件的值 并赋给变量,以便在稍后的过程中使用。
然后就是安装过程中针对用户的选项进行处理 ,安装过程不就是 他自动生成的 拷文件么 。要我们管毛线啊。我这里只是一个示范 我们根据用户选项追加配置文件 也就是config.ini 。首先执行此代码时 文件已经复制完毕 ,配置文件的目录在 %appfolder% 写文本文件 这样即可。
还是 screens-> after installing ->ecit->actions->onPreLoad:
1 -- These actions are performed before the screen is shown.
2 --安装完成 进行初始化全局变量里面的配置
3 --端口,追加配置文件
4 TextFile.WriteFromString(SessionVar.Expand("%AppFolder%\\config.ini"), "\r\nport="..port, true);
5 --有无加密狗
6 if softkey then
7 TextFile.WriteFromString(SessionVar.Expand("%AppFolder%\\config.ini"), "\r\nhardwareIdType=softkey", true);
8 end
9
10 if startup then
11 Shell.CreateShortcut("%StartupFolder%", "DcmPrintSCP", SessionVar.Expand("%AppFolder%\\NewScp.exe"), "", "%AppFolder%", "", 0, SW_SHOWNORMAL, nil, "shortcut for dcmprintscp");
12 end
13 --根据复选框选项创建快捷方式 的代码 这样就可以了。
14 if desktop then
15 Shell.CreateShortcut("%DesktopFolder%", "DcmPrintSCP", SessionVar.Expand("%AppFolder%\\NewScp.exe"), "", "%AppFolder%", "", 0, SW_SHOWNORMAL, nil, "shortcut for dcmprintscp");
16 end
17
18 --卸载程序有问题 必须得新建一个快捷方式
19 Shell.CreateShortcut("%AppFolder%", "shortcut_uninstall", SessionVar.Expand("%AppFolder%\\uninstall.exe"), SessionVar.Expand("\"/U:%AppFolder%\\Uninstall\\uninstall.xml\"" ), "", "", 0, SW_SHOWNORMAL, nil, "shortcut for uninstall");
需要注意的:
字符串连接 是 ..这种方式 ,并不是C++里寻常的+号 也不是 VB里的& 连字符。
还有些需要注意的是 类vb 语法 并非完全跟vb一样 ,比如这段
if startup then
xxx
End
最后我们需要 自己搞一个banner 我已经搞好了 ,既然做东西就要注重细节。
程序启动时显示安装许可 ,然后是用户自定义配置选项 然后是选择安装目录。然后安装程序释放我们打包的文件到指定目录。 然后我们的脚步根据用户定义的配置选项追加配置文件 和创建桌面快捷方式 ,并且用户没有.netFramework框架 自动安装。就这样一个安装包就做好了。像我这种需求 基本上 大部分功能我都用不完 只是冰山一角。
我在这bilibili的半天 你都不厌其烦的看完了 你再 根据自己的实际需求 , 再啃啃帮助文档 就差不多了。
.net程序部署(setupFactory进阶),布布扣,bubuko.com