日期:2014-05-17  浏览次数:21012 次

不知道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:
自定义这个东东。要放在 开始卸载之前弄。


------其他解决方案--------------------
没整过自定义的
------其他解决方案--------------------
引用:
目前以上功能全部都已实现,没有实现的是:
1. 无法创建用户“程序”菜单中的快捷方式
    发现XP和WIN7对这个[用户“程序”菜单]的实际路径解析不一样,为了减少麻烦,干脆不创建什么用户“程序”菜单中的快捷方式了。不过卸载快捷方式是可以在创建打包程序的时候设定的。
2. 无法使用自定义的卸载功能
    使尽浑身解数,就是不执行!(卸载是可以使用的、但执行时……


你根本就不明白我在说什么,谢谢你回复了
------其他解决方案--------------------
自定义卸载的候使用override Uninstall 说明已经卸载完了。
你的自定义卸载的dll也被卸载了。会执行才怪。


使用这个重载
        protected override void OnBeforeUninstall(IDictionary savedState)