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

  前一段时间.应公司某项目产品化要求.制作了一个安装程序.之前也试用了不少安装包制作软件如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组件的相关权限。这个采用程序去实现比较复杂,没有找到相关好的实现。

posted on 2010-08-31 14:13  关寒融冰  阅读(1907)  评论(3编辑  收藏  举报

鲁ICP备07018066号-1