图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]

本文主要是介绍图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WEB应用程序的发布很多时候是需要给最终用户自己进行安装的. 因此我们需要开发终端用户方便使用的安装包.

      。NET工具安装工程向导很快速的就可以实现一个WEB应用程序的安装制作,如果提供给终端用户使用,安装包主要还要做的事情大概有:
         1 、配置web.config
         2、 安装数据库
         3、 创建快捷方式
         4、 创建开始程序菜单
       。。。。。。。。

         创建一个安装工程,并设置好各种属性后。我们可以开始安装包的一些扩展功能。
             
             首先我们需要编写一个E8Installer 类 继承 Installer ,通过重载 Installer类的 install  uninstall ...方法来实现扩展
           
            
  public   override   void  Install(System.Collections.IDictionary stateSaver)
        
{
            
try
            
{
                
base.Install(stateSaver);

                

                
if (!System.Diagnostics.EventLog.SourceExists("EpowerInstall"))
                
{
                    System.Diagnostics.EventLog.CreateEventSource(
                        
"EpowerInstall""");
                }

                myLog.Source 
= "EpowerInstall";

                System.Reflection.Assembly Asm 
= System.Reflection.Assembly.GetExecutingAssembly();
                
string strTemp = Asm.Location;
                System.Diagnostics.Debug.WriteLine(strTemp);
                strFolderName 
= strTemp.Remove(strTemp.LastIndexOf(@"/"), strTemp.Length - strTemp.LastIndexOf(@"/"));

                
                
//确保IIS为正确的版本
                InstallToVersion2(strFolderName.Substring(strFolderName.LastIndexOf(@"/"+ 1));

               
//this.InstallMyConfig(stateSaver);//调用上面的方法
                this.InstallMyConfigTemp(stateSaver);


                
//创建桌面快捷方式
                CreateE8UrlShortCut(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop), strFolderName.Substring(strFolderName.LastIndexOf(@"/"+ 1));

                stateSaver.Add(
"E8HelpDeskDeskSC", System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) +  "//E8.HelpDesk服务管理系统.url" ); //保存桌面快诫方式文件绝对地址 

                
//创建程序快截方式
                string strStartMenue = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
                
if (File.Exists(strStartMenue + "//E8.HelpDesk服务管理系统.url"))
                
{
                    File.Copy(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ "//E8.HelpDesk服务管理系统.url", strStartMenue + "//E8.HelpDesk服务管理系统.url"true);
                   
                }

                
else
                
{
                    File.Copy(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ "//E8.HelpDesk服务管理系统.url", strStartMenue + "//E8.HelpDesk服务管理系统.url"false);
                }

                stateSaver.Add(
"E8StartMenueSC", strStartMenue + "//E8.HelpDesk服务管理系统.url"); //保存开始菜单文件绝对地址 


     

               
                
//安装数据库
                InstallDataBase();

            }

            
catch
            
{
                
throw;
            }

        }

        
public   override   void  Uninstall(System.Collections.IDictionary stateSaver)
        
{

            
//删除快捷键
            if (File.Exists(stateSaver["E8HelpDeskDeskSC"].ToString()))
            
{
                File.Delete(stateSaver[
"E8HelpDeskDeskSC"].ToString());
            }

            
//删除开始菜单
            if (File.Exists(stateSaver["E8StartMenueSC"].ToString()))
            
{
                File.Delete(stateSaver[
"E8StartMenueSC"].ToString());
            }


          
            
base.Uninstall(stateSaver);


            
          
        }

              一、配置web.config
                  刚才我们看到了 Override void Install 方法中有代码配置web.config
                             this.InstallMyConfigTemp(stateSaver);
                  
                  需要有数据接口, 我们可以打开安装工程的 用户界面视图,添加页面 可以作为 参数的入口
                     如图:
                      


           添加了用户界面后,打开自定义操作视图,添加自定义操作,如图:
                

            这样可以实现参数的传入了。
            配置web.config的方法代码参考如下:
           
 sDBServer  =  Context.Parameters[ " dbserver " ].ToString();
                sDBName 
=  Context.Parameters[ " dbname " ];
                strDBSAPsw 
=  Context.Parameters[ " dbsapsw " ];
                sCompanyName 
=  Context.Parameters[ " companyname " ];

               
//  sDBUser = "epuser";
                sDBPsw  =  Context.Parameters[ " password " ];
                
string  strWorkTimeType  =  Context.Parameters[ " WorkTimeType " ].ToString();
                
string  strOnDutyTime1  =  Context.Parameters[ " OnDutyTime1 " ];
                
string  strOffDutyTime1  =  Context.Parameters[ " OffDutyTime1 " ];
                
string  strOnDutyTime2  =  Context.Parameters[ " OnDutyTime2 " ];
                
string  strOffDutyTime2  =  Context.Parameters[ " OffDutyTime2 " ];
                
string  strTempCataLog  =  Context.Parameters[ " filepath " +   @" /Upload/ " ;
                
string  strFileCataLog  =  Context.Parameters[ " filepath " +   @" /Download/ " ;
                
string  strGoLimit  =  Context.Parameters[ " golimit " ];
                
string  strOverLimit  =  Context.Parameters[ " overlimit " ];
                strDBOption 
=  Context.Parameters[ " dboption " ];

         
             
                strCheckMsg 
=  CheckTime(strOnDutyTime1, strOffDutyTime1, strOnDutyTime2, strOffDutyTime2);

                
if  (strCheckMsg  !=   "" )
                
{
                    
throw new InstallException(strCheckMsg);
                }


                strCheckMsg 
=  CheckPathValid(strTempCataLog, strFileCataLog);
                
if  (strCheckMsg  !=   "" )
                
{
                    
throw new InstallException(strCheckMsg);
                }


                strCheckMsg 
=  CheckNumbericSet(strGoLimit, strOverLimit);
                
if  (strCheckMsg  !=   "" )
                
{
                    
throw new InstallException(strCheckMsg);
                }



                
if  (strWorkTimeType  ==   " 1 " )
                    strWorkTimeType 
=   " 50 " ;
                
if  (strWorkTimeType  ==   " 2 " )
                    strWorkTimeType 
=   " 55 " ;
                
if  (strWorkTimeType  ==   " 3 " )
                    strWorkTimeType 
=   " 60 " ;



                
string  strValue  =   " server= "   +  sDBServer.Trim()  +   " ;user id= "   +  sDBUser.Trim()  +  
                                  
" ;password= "   +  sDBPsw.Trim()  +   " ;database= "   +  sDBName.Trim()   +   " ;max pool size=100 " ;
             
                

                System.IO.FileInfo fileInfo 
=   new  System.IO.FileInfo(strFolderName  +   " //web.config " );
                
                
if  ( ! fileInfo.Exists)
                
{
                    
throw new InstallException("web.config文件不存在!" + strFolderName + "//web.config");
                }


                System.Xml.XmlDocument xmlDoc 
=   new  System.Xml.XmlDocument();
                xmlDoc.Load(fileInfo.FullName);

  
                  
bool  blnFindit  =   false ;
                  
foreach  (XmlNode xmlNode  in  xmlDoc[ " configuration " ][ " connectionStrings " ].ChildNodes)
                  
{
                      
if (xmlNode.Name == "add")
                      
{
                          
if (xmlNode.Attributes["name"].Value == "SQLConnString")
                          
{
                              xmlNode.Attributes[
"connectionString"].Value = strValue;
                              blnFindit 
= true;
                          }


                      }

                  }


                  
foreach  (XmlNode xmlNode  in  xmlDoc[ " configuration " ][ " appSettings " ].ChildNodes)
                  
{
                      
if (xmlNode.Name == "add")
                      
{
                          
if (xmlNode.Attributes["key"].Value == "SQLConnString")
                          
{
                              xmlNode.Attributes[
"value"].Value = strValue;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "WorkTimeType")
                          
{
                              xmlNode.Attributes[
"value"].Value = strWorkTimeType;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "OnDutyTime1")
                          
{
                              xmlNode.Attributes[
"value"].Value = strOnDutyTime1;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "OffDutyTime1")
                          
{
                              xmlNode.Attributes[
"value"].Value = strOffDutyTime1;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "OnDutyTime2")
                          
{
                              xmlNode.Attributes[
"value"].Value = strOnDutyTime2;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "OffDutyTime2")
                          
{
                              xmlNode.Attributes[
"value"].Value = strOffDutyTime2;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "TempCataLog")
                          
{
                              xmlNode.Attributes[
"value"].Value = strTempCataLog;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "FileCataLog")
                          
{
                              xmlNode.Attributes[
"value"].Value = strFileCataLog;
                              blnFindit 
= true;
                          }


                           
if (xmlNode.Attributes["key"].Value == "OverTimeLimit")
                          
{
                              xmlNode.Attributes[
"value"].Value = strOverLimit;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "SqlCacheDataSource")
                          
{
                              xmlNode.Attributes[
"value"].Value = sDBName;
                              blnFindit 
= true;
                          }

                          
if (xmlNode.Attributes["key"].Value == "ZH_ServiceTimeLimit")
                          
{
                              xmlNode.Attributes[
"value"].Value = strGoLimit;
                              blnFindit 
= true;
                          }


                        

                      }

                  }


                  
if  (blnFindit  ==   true )
                  
{
                      xmlDoc.Save(fileInfo.FullName);
                  }

                  





            }
            
catch
            
{
                
throw;
            }

            
finally
            
{
            }

            二、安装数据库
                 安装数据库主要是通过执行数据库命令来实现了,代码参考如下:
                
  // 创建数据库
                    sb  =   this .GetSqlFile( " createdatabase.txt " );
                    sb.Replace(
" @dbname@ " , sDBName);
                    sb.Replace(
" @password@ " , sDBPsw);
                    sb.Replace(
" @dbuser@ " , sDBUser);

                    ExecuteSql(connStr, 
" master " , sb.ToString());


                    
// 创建数据库用户
                    sb  =   this .GetSqlFile( " createdbuser.txt " );
                    sb.Replace(
" @dbname@ " , sDBName);
                    sb.Replace(
" @password@ " , sDBPsw);
                    sb.Replace(
" @dbuser@ " , sDBUser);

                    ExecuteSql(connStr, sDBName.Trim(), sb.ToString());


                    
// 空数据库
                    sb  =   this .GetSqlFile( " tables.sql " );
                    ExecuteSql(connStr, sDBName.Trim(), sb.ToString());


                    
// 空数据库所有函数
                    sb  =   this .GetSqlFile( " funGetFullDept.txt " );
                    ExecuteSql(connStr, sDBName.Trim(), sb.ToString());

                    sb 
=   this .GetSqlFile( " funGetFullCatalog.txt " );
                    ExecuteSql(connStr, sDBName.Trim(), sb.ToString());
  


           三、创建快捷方式
                 由于是WEB 安装,安装过程中可以选择设置 WEB站点和虚拟路径名称,因此还不能直接以现有文件的方式生成快捷方式。 可以通过代码生成文件并复制到相关目录下的方式来实现。代码参考:
    
 System.IO.StreamWriter writer  =  System.IO.File.CreateText(sSpecFolder  +   " //E8.HelpDesk服务管理系统.url " );

            writer.WriteLine(
" [internetshortcut] " );
            writer.WriteLine(
" URL=http://localhost/ "   +  strVirtualD);

            writer.Close();
  既然是自己代码生成,还可以写入指定图标。。。。节点
  不过需要注意的是,安装程序生成的文件,需要 重载 uninstaller 方法 中处理删除动作

  一个完整的安装包还需要考虑更多因素,比如 安装环境存在多个 framework版本情况的处理等。限于篇幅不多介绍,希望能给大家的安装包开发起到抛砖引玉的作用

   E8.Net 工作流平台为 .Net 企业应用开发提供了一个起点。 E8.Net 工作流提升企业战略执行力,欢迎访问: http://www.feifanit.com.cn/productFlow.htm
 

这篇关于图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783020

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1