我的Web 安装程序installer类中始终没有跑进过Rollback()和Uninstall()这两个方法,这两个方法啥时候才会触发。

技术小牛 2008-09-05 03:38:40
如题:
我打断点跟了,Installer类中如果有异常,没有近Roollback方法,这两个方法是重载的,难道还要自己手动调?还有就是Uninstall()方法,我安装好WEB站点后,用Windows的添加/删除程序删除安装的程序,在Uninstall()里打了个debuger.break()断点也没有进来,可见这两个方法就是没有被调用过。(注:在install()方法中打断电就可以跑进来) 那位仁兄做过Installer安装的帮忙解释下。因为我想在这两个方法中删除我建的数据库。
...全文
197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
flysent 2011-11-06
  • 打赏
  • 举报
回复
我也困惑!
lhwxf1987 2011-04-29
  • 打赏
  • 举报
回复
问题解决了没,我非常困惑,也特别需要有人能够解决呀
uhaoa 2011-02-18
  • 打赏
  • 举报
回复
我正在困惑中,有帮忙的吗?
853516256@qq.com
q107770540 2010-03-31
  • 打赏
  • 举报
回复
是的..我也一直困惑,为何调用不到重写的Uninstall方法
「已注销」 2010-03-24
  • 打赏
  • 举报
回复
我也期待解决这个问题,rinoa007@126.com,谢谢
ben_jeff 2009-05-14
  • 打赏
  • 举报
回复
楼主,你好,请问你的问题解决了吗,我也想知道如何显示调用rollback(),如果知道能告诉我吗,不胜感激。可以加我的msn:ben_jeff@msn.com
技术小牛 2008-09-05
  • 打赏
  • 举报
回复
没人知道哇,好惨哦。。。做过安装包的因该都用到过着写方法吧
技术小牛 2008-09-05
  • 打赏
  • 举报
回复
部分源码


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);
}
}
}



dabaicai 2008-09-05
  • 打赏
  • 举报
回复
加的进程不对????
vivianzyk 2008-09-05
  • 打赏
  • 举报
回复
发代码来看看撒

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧