不知道CSDN里有没有能解决得了此问题的:C# 自定义安装/卸载。卸载功能没有被执行!本帖最后由 j46577471 于
不知道CSDN里有没有能解决得了此问题的:C# 自定义安装/卸载。卸载功能没有被执行!
本帖最后由 j46577471 于 2012-11-16 18:41:42 编辑 一直使用vs的安装部署项目来给做好的程序打包,用的也不赖。
最近为一个项目做了个B/S结构的查询,完事后需要将此网站打包发布给客户,以便客户直接安装执行,省去手工配置的麻烦,也能减少以后再次部署时对实施人员的依赖。
参考了网上的文章,使用InstallClass来自定义Install和Uninstall操作
简单介绍下思路,其实vs中提供的B/S打包是有的,但最终安装成功的不过是在IIS下的Default Web Site(默认网站)下加了个虚拟目录而已,访问起来看到的http路径可能非常难看(取决于网站文件的实际物理路径到底有多长了)
为了简化操作,并且观看起来也美观,决定制作成如下效果:
1. 安装B/S网站到指定目录(这跟C/S的没什么区别)
2. 要求用户指定网站名称和访问端口(IP地址自动取本机的IPv4地址)
3. 在IIS中创建网站,设定网站名称、IP地址、端口、物理路径(就是B/S网站的安装目录)、自动创建同名的应用程序池
(可选)4. 可以提供更多参数:如是否生成桌面快捷方式、是否在安装成功后启动网站(我的这个打包里都是默认的)
5. 安装时产生的安装日志记录
目前以上功能全部都已实现,没有实现的是:
1. 无法创建用户“程序”菜单中的快捷方式
发现XP和WIN7对这个[用户“程序”菜单]的实际路径解析不一样,为了减少麻烦,干脆不创建什么用户“程序”菜单中的快捷方式了。不过卸载快捷方式是可以在创建打包程序的时候设定的。
2. 无法使用自定义的卸载功能
使尽浑身解数,就是不执行!(卸载是可以使用的、但执行时不会执行我写好的自定义卸载功能)
高手注意:
1. 在自定义操作界面下,“安装”和“卸载”都添加了自定义Installer项目的主输出
2. override Uninstall中其实也有日志记录,不过每次卸载测试都没见到卸载日志,所以也就不会执行我的自定义的卸载(如删除桌面快捷方式、删除安装目录、删除IIS中的网站)
请碰到过或解决过此类问题的高手帮个忙,解答一下。能给多少分都行!
问题相关图片:
1. 测试解决方案结构
2. 自定义操作类
3. 增加的用户界面(要求用户设定网站名称和端口)
4. 设定安装时的自定义操作
提示:其实自定义操作很简单,你如果想测试下可以搜索下相关的帖子,然后在安装和卸载的时候各实现记录一条日志语句的文件就算成功了。问题是:你卸载时候的日志能实现吗?
[最优解释]
http://download.csdn.net/detail/zanfeng/4652469
我打的包。里面有卸载时去掉注销gac.
[其他解释]
建议你把服务器端安装和客户端安装分开来做。
客户端用户要的只是个指向网站的图标,服务器端则是部署你的网站。
[其他解释]
局域网内的网站,基于C/S一体的访问结构
并且此安装包就是要放在服务器上运行的,哪有什么客户端?
B/S的安装好了,把快捷方式分发给别人用就得了
这不是广域网的网站安装,别想偏了(其实只要能用万维网的域名解析到IIS服务器的IP地址,一样能用)
另外如果局域网的ASP.NET项目安装要那么费劲的话,.NET是干什么吃的?
[其他解释]
看来CSDN中的高手还是真少
[其他解释]
还真没有用过uninstall 的Custom action
[其他解释]
从这个帖子来看,uninstall custom Action应该没有问题:
Why is my Uninstall method not called from the msi?
http://stackoverflow.com/questions/667261/why-is-my-uninstall-method-not-called-from-the-msi
[其他解释]
目前以上功能全部都已实现,没有实现的是:
1. 无法创建用户“程序”菜单中的快捷方式
发现XP和WIN7对这个[用户“程序”菜单]的实际路径解析不一样,为了减少麻烦,干脆不创建什么用户“程序”菜单中的快捷方式了。不过卸载快捷方式是可以在创建打包程序的时候设定的。
2. 无法使用自定义的卸载功能
使尽浑身解数,就是不执行!(卸载是可以使用的、但执行时不会执行我写好的自定义卸载功能)
1:
在安装项目的直接点属性的第二个图标。
里面有菜单。这个都找不到。说明你不仔细。
2:
自定义这个东东。要放在 开始卸载之前弄。
[其他解释]
没整过自定义的
[其他解释]
你根本就不明白我在说什么,谢谢你回复了
[其他解释]自定义卸载的候使用override Uninstall 说明已经卸载完了。
你的自定义卸载的dll也被卸载了。会执行才怪。
使用这个重载
protected override void OnBeforeUninstall(IDictionary savedState)
{
base.OnBeforeUninstall(savedState);
}
而不是
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
[其他解释]
从这个帖子来看,其和我遇到的问题是一样的,并且也没有解决
[其他解释]做安装包,能不能看看这个帖子:http://bbs.csdn.net/topics/390289191
[其他解释]第一、自定义的dll不会被卸载,不信你自己试试
第二、你所说的使用OnBeforeUninstall试过了,并且同时都也override了OnUninstall了,同样没反应
第三、override Uninstall的含义就是让其执行自定义的卸载,可以在base.Uninstall()方法前做自定义的卸载(至少是这么个思路),何来Uninstall就是卸载完了一说?
[其他解释]这么久了还没弄好。说明调试功能没到家。
学会使用#debug
学会使用message.show(ex.message)
这样用 try catch
{ }
本身就有问题。
[其他解释]你有在 Agt 属性里加 -u 吗。
[其他解释]服你!
1. 安装包程序,你给我调试一个看看?
2. uninstall都不被触发执行,别说message了,windows也没用。
[其他解释]请问Agt是什么属性?
[其他解释]我要是能调试安装卸载的每一句代码,你怎么说???
只能说自己调试功底不倒位。。。
[其他解释]感觉还落了很多知识点!!!
[其他解释]1. 我看过关于加入断言的调试,知道可以调试安装包,但不是很好用
2. 自定义的卸载方法没有被触发,你给我调试一个看看,别吹牛,我的代码你拿去随便用
[其他解释]切...笑话...吹牛???弱弱的问句,你会附加进程调试么?
这个安装卸载的程序,我写过几次的,还是windows服务安装程序,随便调试
[其他解释]楼主有多少个服务器需要安装?
[其他解释]虽然你的安装包程序没有给出(自定义安装/卸载)源代码,但给了我灵感,我突然好像意识到哪出问题了
我对自定义安装做了如下操作,导致卸载没有被执行
1. 将自定安装卸载类的项目输出(dll文件),属性设置为隐藏,并更改安装路径为网站的BIN目录下(一是觉得好好的网站文件多出了个dll文件和.installstate文件很难看;二是觉得是不是这个dll可以被访问到所以决定更改位置)
2. 设定dll文件的Permanent属性为true以便卸载时可以移除
结果就出现了自定义安装能用,自定义卸载却总也不被执行
今天试用了你的安装文件(观察了gac中的dll的注册和注销),突然觉得的是不是我的dll问题
所以更改了自定义安装添加的dll,所有使用默认设置,结果ok了,并且也能自动卸载干净文件夹
如果以后谁有相同遭遇的可以借鉴下了,分给你了!
[其他解释]1. 你也别弱智了,我说了我的安装程序没有执行自定义的卸载,你拿什么调试?搞笑
2. 问题找到了,不用你费劲了
[其他解释]所以你可以加一些调试信息。比如messsagebox.
一般的日志输入还有权限的问题所以不能保证每次的日志输入都管用。特别是你发在c盘的日志。
[其他解释]问题解决就好了。但花了这么久。也应该找找自己的原因。
debug编译的程序一般都不对外发布的。
[其他解释]该回复于2012-11-28 15:08:54被管理员删除
[其他解释]1. 我一般不编译debug的程序,我都会设置好了release再发布
2. 我这次的问题比较特殊,我想了很多办法调试,可是感觉程序没有被调用执行,什么操作都是徒劳的。连最简单的用log日志的方式都看不到文件,我基本都绝望了
3. 之前发给客户的就是可以自定义安装的,我估计客户一时半会儿不会卸载,我现在可以发布完整的安装版本了,之前的我也可以帮助他手工卸载
[其他解释]该回复于2012-11-28 15:09:07被管理员删除