设为首页 收藏本站
查看: 851|回复: 0

Visual Studio 2008 安装部署项目 程序升级,windows服务安装以及User Setting的深入研究

[复制链接]

尚未签到

发表于 2015-4-30 12:39:59 | 显示全部楼层 |阅读模式
最近使用 VS2008的安装部署项目时,发现了很奇怪的问题:            1、  安装程序升级版本号后,安装完成却发现并没有升级程序。
            2、  升级windows服务时,提示 “服务已经存在”,中止安装。
            3、  升级后,User Setting配置数据恢复到默认值,并没有继承上一版本配置数据。
    经过反复测试我确认是VS2008有了新的改动。
     在网上找了很多时间,发现国内还几乎没有人提出这个问题。在国外的一些论坛里,也有人发现了和我一样的问题,并进行了一定的讨论。通过总结和大量实验,我总算圆满解决以上三个问题。
一、VS2008安装部署项目的最新改动
VS2008帮助文档明确说明,VS2008在安装部署方面与VS2005不同。综合各种资料,总结如下:
VS2005 安装程序,先完全卸载旧版本,然后全新安装新版本。
VS2008 安装程序,则只是升级,没有卸载旧版本。安装程序只是更新确实需要更新的文件,在最后安装新文件的时候,才删除旧文件。
  在MSI文件安装过程中旧版本文件的删除是在 InstallExecute 和 InstallFinalize. 之间执行,而不是在一开始就执行。
  可以参考 http://msdn2.microsoft.com/en-us/library/aa371197(VS.85).aspx
文件根据File versioning rules 进行升级。虽然 File Version 对 VS生成的MSI文件没有影响。文件的修改日期不能作为升级的依据。
可以参考 http://msdn2.microsoft.com/en-us/library/aa368599(VS.85).aspx
VS并没有对文件进行hash处理。
所以,如果仅仅升级了安装程序的Version,没有升级程序集的File Version,安装程序将不会对这些文件进行升级。
二、解决方法
1、  程序安装后并没有升级的问题
解决的关键就是,必须升级程序集的File Version。
最简单的办法:修改解决方案中的所有 AssemblyInfo.cs 文件 最后两行



[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.1")]为


[assembly: AssemblyVersion("1.0.*")]
这样,每次编译都会升级AssemblyVersion, 由于没有指定AssemblyFileVersion, 其默认等于 AssemblyVersion,所以每次编译也会自动升级。

注意,这里 1.0.* 格式并不适用于AssemblyFileVersion

对于以vsdpaLoose形式打包的普通文件,只要有过修改,就会在升级或者修复中被更新。

另外,还可使用第三方插件,更好的管理整个解决方案的Version。


2、  Windows服务升级的问题
由于新版安装过程中并没有卸载旧版本,服务也没有卸载,所以在新版本安装过程中,安装服务时,就会提示“服务已经存在”的错误。
给windows服务的 Custom Action -〉Install 添加Conditon:

NOT PREVIOUSVERSIONSINSTALLED AND Not Installed

说明:NOT PREVIOUSVERSIONSINSTALLED  
确保升级安装时不会重新安装windwos服务
        Not Installed 确保在修复安装时,不会重新安装windwos服务

DSC0000.jpg

具体的Condition语法可以参考
http://msdn2.microsoft.com/en-us/library/aa368012.aspx

3、  User Setting升级的问题

VS2005种程序升级后,User Setting配置数据,仍然使用上一版本的,但在VS2008种,升级后的程序配置文件将恢复到默认值。其实并未覆盖旧版本的,而是每个版本都有独立的配置文件夹,互不影响。
如果需要在程序升级后,继续使用旧版本的配置,则可以使用以下办法解决:

在程序第一次运行时调用

            Settings.Default.Upgrade();

            Settings.Default.Save();当然,需要自己控制该段代码只运行一次。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-62285-1-1.html 上篇帖子: Windows 2008应用之IIS 7中配置ISAPI和CGI限制 下篇帖子: Visual C# 2008+SQL Server 2005 数据库与网络开发-- 12.3 Windows窗体程序中的事件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表