品牌推广平台,成都seo推广,关于未备案网站,微信怎么开店铺一个.NET Framework的Devexpress UI Windows Form项目#xff0c;用的InstallShield#xff0c;前些个版本都好好的#xff0c;最近几个版本突然就没法更新了#xff0c;每次更新的时候都覆盖不了原文件#xff0c;而且这样更新后第一次打开程序#xff08;虽然是老程序用的InstallShield前些个版本都好好的最近几个版本突然就没法更新了每次更新的时候都覆盖不了原文件而且这样更新后第一次打开程序虽然是老程序还会执行一遍安装如果安装介质已经没有了程序都进不去了。折腾了一阵终于把这个事情的来龙去脉弄清楚了。
为什么没法覆盖
这里得说到InstallShield打的包有两种升级模式一种是Minor Upgrade也就是小版本更新这种更新通常采用覆盖安装的方式上面说的没法覆盖原文件就是在这种安装方式下出现的通常1.1更新到1.2这样的就会采用Minor Upgrade另一种是Major Upgrade大版本更新这种更新会先卸载原有的安装然后装新版本通常1.x更新到2.x就会采用这种更新方式。
原因官方文档里有一段话 If any components or features have been deleted from the latest version of the setup, you must perform a major upgrade to avoid potential problems associated with leaving resources and registrations on a machine. Also note that if you move a feature or component to another location in the setup, you have effectively deleted it from its original location. 意思是如果删了某个组件就没法使用Minor Upgrade了就得用Major Upgrade。看到这个的时候我是迷茫的我啥也没删呀。
删了什么
好在InstallShield可以自己对比两个版本。在Upgrade里加一个Minor Upgrade然后在Setup To Upgrade里选择之前版本的安装包。
设置好之后Build一下他就会报错表示新版本比旧版本缺东西但是很可惜他不会告诉我们缺什么只会告诉GUID如下图。
找回文件
上面的GUID并不会和缺失的文件名关联起来我们依旧不知道删了什么那么怎么找回来呢嗯。。找不回来不过有个操作可以抢救一下。
安装旧版本的软件用新版本的软件更新卸载软件看安装目录下剩下什么。 这个的原理是在更新成新版本后卸载时只会卸载新版本里有的组件新版本里没有的东西他就会留着所以剩下的就是删掉的东西。
恢复组件
找到删了什么之后就是得把这些文件加进来了有可能是文件也有可能是需要添加引用然后在InstallShield里把文件加进来。重新加进来的组件他会重新随机生成一个GUID需要手动改回原来的GUID。理论上是没法严格对应的我也不知道需不需要严格对应我就是按着文件名的排序一个个改下来确实能用。
写在最后
我应该是没有手动删过什么东西的但还是出现了这个问题丢失的全是Devexpress的dll我猜是我在开发过程种尝试了一些组件某个版本虽然把引用删了但是没有清理项目就一直都在我又加进了InstallShield后来清理了一下就没了。或者也有可能是Vistual Studio 和 InstallShield同时开着突然的变动就导致InstallShield侦测到文件没了再出现也重新给了我个GUID。有知道原因的大哥请指教一下。