• 产品安装包程序开发技术实现介绍


      前一段时间.应公司某项目产品化要求.制作了一个安装程序.之前也试用了不少安装包制作软件如NSIS、Smart Install Maker、VS安装布署项目等

    但按领导指示要“一键化安装”,简化用户布署服务器的操作。因为是.NET 开发的B/S应用系统,所以如果要自动配置环境、布署IIS站点、还原数据库等操作用安装包制作软件就显的力不从心了。于是决定自行开发一个比较简单的安装程序。

      要点:1.此安装程序显然是WIN32程序(不能让用户去为了执行安装程序再配置相关环境),于是决定采用VB6.0开发。

                  2.根据相关方法(读注册表等)要实现判断操作系统信息、IIS是否正确安装、数据库是否正确安装、.NET Framework 4.0(产品运行环境)是否安装。

         3.当操作系统、IIS、数据库没有正确安装是需提示用户无法继续,需用户自行进行相关软件的安装操作。

         4.当.NET Framework4.0没有安装时,需自动安装.NET Framework4.0。

         5.环境检测没有问题后,让用户填写相关信息,配置信息如IIS站点端口号、数据库登录用户/密码等。

         6.释放相关程序文件到用户所选安装目录,调用执行外接相关程序。

         7.因为某些设置操作用VB6实现起来太复杂,因此在确定有.NET Framework4.0环境情况下,

          可采用主程序(vb6)调用外部程序(c#)去实现一些设置操作,如IIS站点自动布署、数据库自动还原、相关目录权限设置、相关菜单创建。

         8.释放相关卸载程序。

          相关主要界面一览:

     

         主安装程序(VB6)中用到的技术点比较少,主要是嵌入资源文件、读写注册表、读写INI文件、得到系统文件夹、读取系统进程、CAB包释放等,这个都可以在网上搜索到。

         在上面最后一张图中点击执行配置后,将采用SHELL方式,调用IIS 自动配置+创建快键方式、SQL数据库还原、文件夹权限设置三个小程序进行配置操作。

         

         程序都是些基础代码,在这里简单讲一下实现原理:

          1.IIS 自动配置+创建快键方式:

            IIS站点自动配置功能可以借签:利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法       

            原理:IIS 6.0以后使用MetaBase.xml存储IIS信息,因此可以直接修改这个文件即可. 相关.NET Framework 版本设置需要注意要取得其系统目录再设置ScriptMaps信息.

            通过把主安装程序中用户填写的相关端口号、站点名称等信息对IIS自动配置程序用到的INI文件进行更新后,再执行IIS自动配置用户设置的站点。

               创建快捷方式主要代码如下:

               // Create a Windows Script Host Shell class

                          IWshShell_Class shell = new IWshShell_Class();//创建 Windows Script Host Shell 类 

                          // Define the shortcut file

                          IWshURLShortcut shortcut = shell.CreateShortcut(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Favorites) + "\\测试.url") as IWshURLShortcut;

                          shortcut.TargetPath = "http://localhost:88";

                          // Save it

                          shortcut.Save();

          2.SQL数据库还原

            SQL数据库操作比较简单,可以参考:C#自动附加数据库或还原、备份、分离等 - 曾伟 - 博客园

            上面的这篇文章实现的SQL数据库操作比较全面,并且比较通用,值得借签学习。

          3.文件夹权限设置

            利用C#中DirectorySecurity 类对配置到INI中的相关目录进行权限设置,主要代码如下:

              DirectoryInfo dirinfo = new DirectoryInfo(pathname);   

              //取得访问控制列表   
              
    DirectorySecurity dirsecurity = dirinfo.GetAccessControl(); 

              //FullControl 完全控制
                    dirsecurity.AddAccessRule(
    new
     FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));

                    //ReadOnly 只读
                      dirsecurity.AddAccessRule(
    new
     FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));         

                //Write 写入   
                     dirsecurity.AddAccessRule(
    new
     FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));   
                   
    //Modify 修改

                     dirsecurity.AddAccessRule(
    new
     FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));   

         尚未解决问题:

          1.对于IIS 6.0初次布署.NET项目时,需要对WEB 扩展中将.net 相关项设置为允许,此操作可以通过程序实现,本人还没有找到相关技术实现文章,如果有朋友懂这面请评论指导。

          2.不少项目系统中都会用到导出EXCLE等操作。需要设置COM组件的相关权限。这个采用程序去实现比较复杂,没有找到相关好的实现。

  • 相关阅读:
    Principle of Computing (Python)学习笔记(5) BFS Searching + Zombie Apocalypse
    《Java从入门到精通》src9-25
    《Java从入门到精通》src0-8
    windows查看某个端口被谁占用
    css selector: xpath:
    awk 正则表达式
    Centos系统各种日志存详解
    mysql日志文件
    mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY'
    递归函数时间复杂度分析
  • 原文地址:https://www.cnblogs.com/zengxlf/p/1813573.html
Copyright © 2020-2023  润新知