最近在打包web程序,遇到一些问题,向大家请教请教!1、自定义操作(通过安装程序类执行sp_attach_db)创建了sqlserver数据库,但是卸载程序时无法卸载数据库,因为*.mdf文件与sqlserver是在连接中,在安装类的uninstall中写的分离数据库代码不起作用,请问一下执行安装类的uninstall时,是在卸载程序删除应用文件之前还是之后?也就是说怎样才能先执行卸载代码再删除文件和安装信息?2、由于程序要调用word过程,需要添加microsoft word的com引用,但word的版本不同引用也不一样,能不能做到根据客户的本机安装的word版本来动态改变word引用?3、安装项目中用户界面有一客户信息的窗口,可以验证注册序列号,有哪位高手用过?

解决方案 »

  1.   

    1、添加一个新项目->选择类库模板->命名为DBCustomAction 
    2、单击项目右键->添加新项->选择安装程序类(命名为DBCustomAction.cs) 
    3、在服务器资源管理器中添加->连接到数据库->指定用户密码(选择允许保存密码)->数据库选择master 
    4、切换到DBCustomAction.cs的视图状态->将服务器资源管理器数据库连接中的master.dbo拖动到designer中 
    5、添加一个新项sql.txt(注意要使用小写),输入下列sql代码 
    CREATE TABLE [dbo].[MK_Employees] ( 
    [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , 
    [Rsvp] [int] NULL , 
    [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL  
    ) ON [PRIMARY]; ALTER TABLE [dbo].[MK_Employees] WITH NOCHECK ADD  
    CONSTRAINT [PK_MK_Employees] PRIMARY KEY CLUSTERED  

    [Name] 
    ) ON [PRIMARY]; 
    (P.S:也可以直接用SqlServer导出) 6、在sql.txt的右键属性中->生成操作->嵌入的资源 
    7、将DBCustomAction.cs切换到代码视图,添加下列代码 
    private  string GetSql(string Name) 
          { 
             try 
             { 
                Assembly Asm = Assembly.GetExecutingAssembly(); 
                Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "."+Name); 
                StreamReader reader = new StreamReader(strm); 
                return reader.ReadToEnd(); 
             } 
             catch (Exception ex) 
             { 
                Console.Write("In GetSql:"+ex.Message); 
                throw ex; 
             } 
          }       private void ExecuteSql(string DataBaseName,string Sql) 
          { 
             System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);          Command.Connection.Open(); 
             Command.Connection.ChangeDatabase(DataBaseName); 
             try 
             { 
                Command.ExecuteNonQuery(); 
             } 
             finally 
             { 
                Command.Connection.Close(); 
             } 
          } 
          protected void AddDBTable(string strDBName) 
          { 
             try 
             { 
                ExecuteSql("master","CREATE DATABASE "+ strDBName); 
                ExecuteSql(strDBName,GetSql("sql.txt")); 
             } 
             catch(Exception ex) 
             { 
                   Console.Write("In exception handler :"+ex.Message); 
             } 
          }       public override void Install(System.Collections.IDictionary stateSaver) 
          { 
              base.Install(stateSaver); 
                 AddDBTable(this.Context.Parameters["dbname"]); 
          } 
    8、再添加一个新项目,(选择添加到解决方案中)->项目类型为安装项目->命名为DBCustomAction Installer 
    9、选择应用程序文件夹->添加->项目输出->主输出 
    10、在方案资源管理器中->右键安装项目(DBCustomAction Installer)->视图->用户界面 
    11、选中启动结点->添加对话框->文本A 
    12、选动文本框A->右键->上移一直到最顶端 
    13、选择文本框A属性->修改BannerText,(Specify Database Name) 
    14、修改BodyText(This dialog allows you to specify the name of the database to be created on the database server. ) 
    15、修改EditLabel1(Name of DB),修改Edit1Porperty(CUSTOMTEXTA1),将其他Edit2,3,4的Edit(2,3,4)Visible属性设为false; 
    16、在方案资源管理器中->右键安装项目(DBCustomAction Installer)->视图->自定义操作 
    17、选中安装结点->添加->双击应用程序文件夹->主输出来自DBCustomAction(活动)->右键属性->CustomActiveData属性修改为/dbname=[CUSTOMTEXTA1] 
    18、编译生成,OK! 
      

  2.   

    to:回复人: goody9807()安装数据库我没有问题,主要是卸载时
      

  3.   

    还有个问题,在安装项目中,在什么地方设置ProductName、Manufacturer和软件版本信息?
      

  4.   

    to:
     回复人: sykpboy(小憩(吃心绝对)) 多谢支持!!!要不我的帖子早就沉的不知哪去了! 如果没人解决给你50分:)
    剩下的分分给关注的人第一个问题我已经解决
      

  5.   

    还有个问题,在安装项目中,在什么地方设置ProductName、Manufacturer和软件版本信息
    不知道,我没有用过,不过你去看一下你的程序里面的AssemblyInfo.cs
    这个可能有帮助吧 ,因为好像提到了版本的信息
      

  6.   

    to:回复人: Greenhander(安安) ( )我已经找到了,多谢!
    是在安装项目的属性里,用右键查看属性里没有,一定要在属性栏里才能看到
      

  7.   

    楼主,希望你做好后,发给我一份好不,
    因为我也只知道写安装的,不知道卸载
    邮箱:[email protected]
      

  8.   

    to:Greenhander(安安)好的,我还做了怎么样把自定的安装文件夹设置成虚拟目录,做好以后发给你