安装文件制作总结

来源:互联网 发布:java从哪里下载 编辑:程序博客网 时间:2024/04/30 12:11
安装文件制作总结  
一、创建基本安装部署项目  
1.            在解决方案资源管理器,右击解决方案添加新建项目安装部署项目Web安装项目,例如命名为WebSetup。  
2.            右击WebSetup项目视图文件系统。  
(1)添加你所需要安装的Web程序(例如:WebApp)。在文件系统中右击Web应用程序文件夹项目输出选择WebApp,同时选种主输出何内容输出。  
(2)添加相关的文件,例如.jpg  、.xml等文件(根据帮助可知这些文件无法自动添加到安装文件中),注意:原文件怎么样存放的,添加时也要以同样的文件夹存放。  
例如,原文件存放在//aa/cc/bb.txt,则添加文件bb.txt时也应如此,右击web应用程序文件夹添加web文件夹(命名为aa)右击aa添加web文件夹(命名为cc)右击cc添加文件(bb.txt).  
3.            右击WebSetup项目视图用户界面。  
1)            添加你所需要的界面。安装启动添加对话框文本框(A),如果添加了文本框则必须要上移(右击要上移的文本框上移)到安装地址之上。  
2)            如果有许可协议对话框,则在文件系统中要添加一个.rtf格式的文件(注意:改文件一定要时通过word另存为.rtf格式得到,不可以通过记事本创建文件后把扩展名改为.rtf而得到,那样将不显示许可协议),右击许可西医对话框属性把licenseFile属性选为你所要添加的许可协议文件。  
(属性BannerBitmap    安装对话框中的图片;Sunken    是否凹凸显示。其他对话框相同)  
以上是安装文件制作的基本过程。如果要安装数据库,和用户自定义的一些操作如下:  
二、添加自定义操作----安装数据库  
1)            在用户界面添右击添加对话框文本框(A)如果添加了文本框则必须要上移(右击要上移的文本框上移)到安装地址之上。  
2)            如果只安装一个数据库就把其Edit2Visible,Edit3Visible,Edit4Visible设置为false.把Edit1property定义一个变量名,例如PARA1。  
           3)  自定义用户操作,在资源管理器界面右击资源管理器新建C#(也可以是VB.NET),选择类库,命名为WebInstall  。  
           4)  新建项目会自动生成一个class1.cs文件,把次文件删除。右击WebInstall添加新项安装类,命名为Install.cs。  
5)右击Install.cs视图设计界面,然后在服务器资源管理器中添加数据库master的连接,添加好后把这个连接拖到Install的设计界面。  
6)在Install.cs文件中添加以下代码  
           注:要添加应用添加应用  
using  System.Reflection;  
using  System.Data;  
using  System.Data.SqlClient;  
using  System.IO;  
安装数据库代码  
           ///  <summary>  
                       ///  获得配置文件中嵌入的文本文件  
                       ///  </summary>  
                       ///  <param  name="Name">文件名</param>  
                       ///  <returns></returns>  
                       private  string  GetSql(string  Name)  
                       {                                      
                                   Assembly  Asm  =  Assembly.GetExecutingAssembly();    
                                   Stream  strm  =  Asm.GetManifestResourceStream(Asm.GetName().Name  +  "."+Name);    
                                   StreamReader  reader  =  new  StreamReader(strm);    
                                   return  reader.ReadToEnd();    
                       }  
 
                       ///  <summary>  
                       ///  指定的数据库执行SQL语句  
                       ///  </summary>  
                       ///  <param  name="DatabaseName">数据库名</param>  
                       ///  <param  name="sqlstring">SQL语句</param>  
                       ///  <returns></returns>  
                       private  void  ExecuteSql(string  DataBaseName,string  sqlstring)  
                       {  
                                   System.Data.SqlClient.SqlCommand  Command  =  new  System.Data.SqlClient.SqlCommand(sqlstring,sqlConn);    
 
                                   Command.Connection.Open();    
                                   Command.Connection.ChangeDatabase(DataBaseName);    
                                   try    
                                   {    
                                               Command.ExecuteNonQuery();    
                                   }    
                                   finally    
                                   {    
                                               Command.Connection.Close();    
                                   }    
 
                       }  
 
                       ///  <summary>  
                       ///  创建数据库及数据库表  
                       ///  </summary>  
                       ///  <param  name="DBName">数据库名</param>  
                       ///  <param  name="assemblyName">配件中数据库脚本资源的名称</param>  
                       ///  <returns></returns>  
                       protected  bool  CreateDBAndTable(string  DBName)  
                       {  
                                   bool  Restult  =  false;  
                                   try    
                                   {  
                                                           ExecuteSql("master","CREATE  DATABASE  "  +  DBName);    
                                                           ExecuteSql(DBName,GetSql("bbssql.txt"));    
                                                           Restult  =  true;  
                                     
                                   }                          
                                   catch(Exception  ex)    
                                   {    
//次段代码为调试用可以不添加  
 
                                               StreamWriter  sw  =  new  StreamWriter(@"c:/SrInforSys.txt");  
                                               sw.WriteLine("[SrInforSys案装错误]");  
                                               sw.WriteLine(ex.Message.ToString());                                                  
                                               sw.Close();                                                                          
           }    
                                   return  Restult;  
                       }  
                         
                                     
                       ///  <summary>  
                       ///  安装数据库  
                       ///  </summary>  
                       ///  <param  name="stateSaver"></param>  
                       public  override  void  Install(IDictionary  stateSaver)  
                       {  
                                   base.Install  (stateSaver);  
                                   if(!CreateDBAndTable(this.Context.Parameters["dbname1"].ToString()))  
                                               throw  new  ApplicationException("创建数据库时出现严重错误!");  
                       }  
在添加安装数据库时一定要有创建数据库的脚本,并且把它存为.txt文件添加到WebInstall项目中了,右击该文件(例如,database.txt)&#61664;属性&#61664;生成操作,该为嵌入资源(这点很中要)。  
7)生成WebInstall.dll文件。在解决方案资源管理器中右击&#61664;WebSetup项目&#61664;视图&#61664;在文件系统,右击Web应用程序文件夹&#61664;添加&#61664;项目输出&#61664;选择WebInstall(主输出)&#61664;确定  
8)在解决方案资源管理器中右击&#61664;WebSetup项目&#61664;视图&#61664;自定义操作,在自定义操作界面区中右击安装&#61664;添加自定义操作&#61664;在Web应用程序文件夹&#61664;主输出来自WebInstall(活动)  
添加完后右击主输出来自WebInstall(活动)&#61664;属性,把customeActionData设置为/dbname=[PARA1](此处的dbname为要接受的参数名,PARA1就是前面添加的文本框中Edit1property)。  
9)编译WebSetup程序就可以了。  
如果有两个或者多个数据库时,就把文本框的其他输入框设置为true(Edit2Visible,  Edit3Visible  ,  Edit4Visible),并且在自定义操作中把customeActionData属性改为/dbname1=[PARA1]  /dbname2=[PARA2]  /dbname3=[PARA3]  /dbname4=[PARA4](有几个写几个)中间必须用一个空格分隔。  
三、添加启动条件  
在安装我们做好的程序总是要有一些启动条件的,例如必须有.net  framework,  SQL等。以下就以这SQL为例子  
1)在解决方案资源管理器中右击&#61664;WebSetup项目&#61664;视图&#61664;启动条件&#61664;目标计算机上的要求&#61664;添加注册表启动条件&#61664;把名字改为search  of  SQL&#61664;属性,更改其属性  
Property----------------SEARCHOFSQL  
RegKey----------------SOFTWARE/Microsoft/MSSQLServer/Setup(指定要搜索的表项)  
Root--------------------vsdrrHKLM(指定要搜索的注册表根)  
Value-------------------SQLPath(要搜索的注册表值)  
2)在启动条件界面,右击启动条件&#61664;添加启动条件命名为SQL  Server,更改属性  
Condition---------------  SEARCHOFSQL  
Message-----------------您本机上没有SQL  Server  2000,请先安装!  
如果添加其他的启动条件类似。  
四、卸载程序  
1)在WebInstall项目中的Install.cs中添加如下代码  
private  bool  DeleteDatabase()  
                       {  
                                   try  
                                   {              
                                               ExecuteSql(此方法就时前面案扎数据库的方法)("master","USE  MASTER  IF  EXISTS  (SELECT  NAME  FROM  SYSDATABASES  WHERE  NAME=’aa’)  DROP  DATABASE  aa");    
                                               return  true;  
                                   }  
                                   catch  
                                   {  
                                               return  false;  
                                   }  
                       }                          
public  override  void  Uninstall(IDictionary  savedState)  
                       {  
                                   if  (savedState  ==  null)  
                                               throw  new  ApplicationException("未能卸载!");  
                                   else  
                                   {  
                                               base.Uninstall  (savedState);  
                                               if(!DeleteDatabase())  
                                                           throw  new  ApplicationException("卸载过程中发生错误,未能卸载!");  
                                   }                          
                       }  
2)WebSetup项目的自定义操作中,右击卸载&#61664;添加自定义操作&#61664;在Web应用程序文件夹&#61664;主输出来自WebInstall(活动)  
 
五、添加删除垃圾文件  
这一点不一定用的到,不过有一些老板认为做处来的安装程序太小了给用户看不时很好就添加一些垃圾文件,让安装程序变大点,安装完后又删除。  
在WebInstall项目中的Install.cs中添加如下代码  
 
           private  void  DeleteFile()  
                       {  
                                   string  stLocation;  
                                   Assembly  asm  =  Assembly.GetExecutingAssembly();  
                                   stLocation  =  asm.Location;                          
                                   stLocation  =  stLocation.Substring(0,stLocation.LastIndexOf("//"))  +"//要删除的文件名";  
                                   System.IO.File.Delete(stLocation);                                                  
                       }  
(此文件事先添加到Web应用程序文件夹下)  
把DeleteFile()方法添加到            public  override  void  Install(IDictionary  stateSaver)中即可。  
*****************************************************************************  
把.NET程序部署到没有安装.NET  Framwork的机器上  ?  
 
http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/deployNETApp.mspx  
 
在微软官方网站下载Microsoft  Visual  Studio  .NET  2003  引导程序插件  
文件名叫:PluginInstaller.msi  
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=627921a0-d9e7-43d6-a293-72f9c370bd19&displaylang=zh-cn  
你安装了这个插件然后用IDE自带的安装部署即可,他会在你的安装包里另加三个文件:MDAC  2.8  和  .NetFramework  和中文语言包,并且自动判断系统是否已安装框架。  
 
 
Microsoft  Visua