zoukankan      html  css  js  c++  java
  • .net程序部署(setupFactory进阶)

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

    config是一个文本文件。 注意所有文件的 destination都是 %appfolder%   ,这代表程序 安装目录 setupfactory有很多这样的 全局变量 用起来非常方便 ,获取系统环境桌面目录 %desktop%  。 这类似 win批处理命令的%windir%  我们把目录改一下 %appfolder% ools,这样安装时就可再创建子文件夹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"), "
    port="..port, true);
     5 --有无加密狗
     6 if softkey then
     7 TextFile.WriteFromString(SessionVar.Expand("%AppFolder%\config.ini"), "
    hardwareIdType=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的半天 你都不厌其烦的看完了  你再 根据自己的实际需求  , 再啃啃帮助文档 就差不多了。

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

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

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

    用注册表功能 检测.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

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

    按钮的事件在这里: ,先点到action去 

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

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

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

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

    DlgEditField.SetProperties

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

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

    两个字 倒腾

  • 相关阅读:
    [翻译].NET Shell Extensions
    设计模式复习小结一(Strategy Pattern/Observer Pattern/Decorator Patter/Factory Pattern)
    学习定制自己的博文1
    SQLServer复习文档1(with C#)
    C#学习笔记-基础知识篇(不定期更新)
    C#学习笔记-迭代器模式
    C#学习笔记-组合模式
    C#学习笔记-备忘录模式
    C#学习笔记-适配器模式
    C#学习笔记-状态模式
  • 原文地址:https://www.cnblogs.com/assassinx/p/3775665.html
Copyright © 2011-2022 走看看