接上一篇 继续使用上一篇的project 。将archive里无用的文件删除 添加我们需要的文件进来。

.net程序部署(setupFactory进阶)

config是一个文本文件。 注意所有文件的 destination都是 %appfolder%   ,这代表程序 安装目录 setupfactory有很多这样的 全局变量 用起来非常方便 ,获取系统环境桌面目录 %desktop%  。 这类似 win批处理命令的%windir%  我们把目录改一下 %appfolder%\tools,这样安装时就可再创建子文件夹tools

 

我们确确实实 想定义一个我们自己独有的 用户体验好的 安装包 ,我们不想千篇一律。

screens ->before installing 选项卡:

welcome to setup 删掉,然后在license agreement编写我们自己的 安装许可文本:

.net程序部署(setupFactory进阶)

我们需要自定义一个对话框界面  用来让用户在安装过程中进行配置。在安装时也将针对用户的配置进行相应的处理。
添加一个我们自定义的安装配置界面:

 .net程序部署(setupFactory进阶)

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框架 自动安装。就这样一个安装包就做好了。像我这种需求 基本上 大部分功能我都用不完  只是冰山一角。

 

 .net程序部署(setupFactory进阶)

.net程序部署(setupFactory进阶)

 

我在这bilibili的半天 你都不厌其烦的看完了  你再 根据自己的实际需求  , 再啃啃帮助文档 就差不多了。

2016.8.24 时至今日  应公司业务需求 没想到我又在倒腾这玩意 。有看到了以前没注意到的东西 ,就像书样 重新读一遍又是一番滋味。
我说这脚本怎么这么灵活 这么强大呢,原来这脚本名叫LUA 是一种开源的经过成熟发展的东东,并且可以与C++写的dll形成互操作调用。 
只是这玩意写起来 找了半天 没什么工具 既没提示又没啥的 纯记事本的方式写 太tm蛋疼了。

你看博客的代码插入选项里都有Lua 是我两年前没发现他么

.net程序部署(setupFactory进阶)

以前一直 打包系统必备项 打包系统必备项进安装包里 ,然后怎么怎么实现自动安装系统必备项。现在重要找到方式了 ,根本用不着倒腾dependencies
直接resources菜单 primer files 把.net安装文件加进去 ,界面上说了 执行的时候会自定释放到临时目录。

.net程序部署(setupFactory进阶)

用注册表功能 检测.net是否安装:

 1 --.net版本检测
 2 
 3 dotnetVers=Registry.GetKeyNames(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\");
 4 if (dotnetVers~= nil) then
 5 for j,k in pairs(dotnetVers) do
 6 if (String.Find(k,"4.0",1,false)~= -1) then
 7 dotnetVer="4.0"
 8 elseif (String.Find(k,"4.5",1,false)~= -1) then
 9 dotnetVer="4.5"
10 end
11 end
12 end

 

还有需要值得注意的是,在这个设计界面随意插入控件:

.net程序部署(setupFactory进阶)

按钮的事件在这里: ,先点到action去 .net程序部署(setupFactory进阶)

然后on ctr message 即是按钮事件代码:

.net程序部署(setupFactory进阶)

找到附加文件的释放目录并进行自动安装,以前不知道这玩意执行时还可以带参数进行静默安装:

1 Shell.Execute(SessionVar.Expand("%TempLaunchFolder%\\NetFramework4.0.exe"), "open", " /passive", "", SW_SHOWNORMAL, true)

 

通过SetProperties函数更改控件的值 显示隐藏等 ,通过GetProperties 获取值。

DlgEditField.SetProperties

 记住 lua 还可以调用c++扩展。

基本上通过以上手段 加上lua强大的脚本控制逻辑 还有c++扩展的配合,你要制作什么样的安装包程序应该都可以倒腾出来 。

两个字 倒腾

相关文章:

  • 2022-03-07
  • 2021-10-20
  • 2022-01-03
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
猜你喜欢
  • 2021-05-23
  • 2022-01-13
  • 2021-06-17
  • 2022-12-23
  • 2021-11-04
  • 2022-01-15
相关资源
相似解决方案