如题:
我打断点跟了,Installer类中如果有异常,没有近Roollback方法,这两个方法是重载的,难道还要自己手动调?还有就是Uninstall()方法,我安装好WEB站点后,用Windows的添加/删除程序删除安装的程序,在Uninstall()里打了个debuger.break()断点也没有进来,可见这两个方法就是没有被调用过。(注:在install()方法中打断电就可以跑进来) 那位仁兄做过Installer安装的帮忙解释下。因为我想在这两个方法中删除我建的数据库。

解决方案 »

  1.   

    部分源码
    namespace DBInstaller
    {
        [RunInstaller(true)]
        public class DBInstaller : Installer
        {
            #region "const variable"
            //webservice虚拟目录
            private const string WEBSERVICE_VIRTUALPATH = "QASWebService";
            #endregion        #region private variable
            //数据库名
            private string m_dbName;        //数据库服务器地址
            private string m_server;        //用户名
            private string m_user;        //密码
            private string m_pwd;        //连接字符串
            private string m_connString;
          
            #endregion        #region Base Class's Function
            /// <summary>
            /// 重写OnBeforeInstall方法
            /// </summary>
            /// <param name="savedState"></param>
            protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
            {
                System.Diagnostics.Debugger.Break();//这这断点安装时可以进来
                //取得DB链接信息
                m_dbName = this.Context.Parameters["dbname"];
                m_server = this.Context.Parameters["server"];
                m_user = this.Context.Parameters["user"];
                m_pwd = this.Context.Parameters["pwd"];
       
                base.OnBeforeInstall(savedState);
            }        /// <summary>
            /// 重写Install方法
            /// </summary>
            /// <param name="stateSaver"></param>
            public override void Install(System.Collections.IDictionary stateSaver)
            {
                base.Install(stateSaver);            //创建数据库
                CreatDataBase(m_dbName);            //写Web.config
                WriteWebConfig();        }        /// <summary>
            /// 重写Commit方法
            /// </summary>
            /// <param name="savedState"></param>
            public override void Commit(System.Collections.IDictionary savedState)
            {
                base.Commit(savedState);           
            }        /// <summary>
            /// 重写Rollback方法
            /// </summary>
            /// <param name="savedState"></param>
            public override void Rollback(System.Collections.IDictionary savedState)
            {
                System.Diagnostics.Debugger.Break();//这里有断点
                //删除数据库
                ExcuteSql(true, " IF EXISTS (SELECT NAME FROM SYSDATABASES WHERE NAME='" + m_dbName + "') " +
                                    " DROP DATABASE " + m_dbName);
                base.Rollback(savedState);           
            }        /// <summary>
            /// 重写OnBeforeUninstall方法
            /// </summary>
            /// <param name="savedState"></param>
            protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
            {  
                System.Diagnostics.Debugger.Break();//这里有断点
                //删除数据库
                ExcuteSql(true, " IF EXISTS (SELECT NAME FROM SYSDATABASES WHERE NAME='" + m_dbName + "') " +
                                    " DROP DATABASE " + m_dbName);
                //卸载服务
                InstallWindowsService(false);
                base.OnBeforeUninstall(savedState);
            }        /// <summary>
            /// 重写Uninstall方法
            /// </summary>
            /// <param name="savedState"></param>
            public override void Uninstall(System.Collections.IDictionary savedState)
            {            
                base.Uninstall(savedState);
            }
      }
    }
      

  2.   

    楼主,你好,请问你的问题解决了吗,我也想知道如何显示调用rollback(),如果知道能告诉我吗,不胜感激。可以加我的msn:[email protected]
      

  3.   

    我也期待解决这个问题,[email protected],谢谢
      

  4.   

    是的..我也一直困惑,为何调用不到重写的Uninstall方法
      

  5.   

    我正在困惑中,有帮忙的吗?
    [email protected]