Paying for upgrades, by Bob Arnson
发布日期:2021-08-13 23:38:36 浏览次数:48 分类:技术文章

本文共 3492 字,大约阅读时间需要 11 分钟。

Following content is reprinted from , please go to the original website for more information.

Author: Bob Arnson

Paying for upgrades

No, this isn’t a post on the costs of proprietary software but an amplification/clarification to my . On wix-users, there’s a  on the pains of automating upgrades.

If your product consists of a large number of files and the file set changes regularly – files being added and removed during the product lifetime – it’s only natural to want to avoid the cost of hand-authoring setup changes to match. (A little over a year ago, I , so I’m familiar with the pain and desire for automation.)

Unfortunately, our  the   makes such automation difficult. The closest we-the-WiX-team has gotten to a complete solution is to create components with one file each, which makes the component eligible to have its component GUID  (using an asterisk in the  value).

What doesn’t work is when files are removed. Windows Installer doesn’t let you remove components in a minor upgrade, so using one file per component doesn’t immediately solve the automation problem: Your automatically-generated minor upgrade will be missing a component, which is a .

Nor can you avoid the problem by using multiple files per component because component rules say that components must be immutable: You can’t add or remove resources from a component.

So automating the creation of minor upgrades has additional costs:

  • Additional tooling to try to support removing files without blatantly violating component rules.
  • Additional coding in your product to tolerate “obsolete” files without being able to remove them.

For many types of apps, but especially Web apps with many content files, that’s a huge cost. Being able to ship minor-upgrade patches from an automated build might be a benefit worth the cost. It’s really a decision your team needs to make.

I’ll add that if you don’t anticipate shipping patches on a regular schedule, you might just automate the authoring of your RTM product and pay the price of manually tweaking your setup authoring when you need to ship a patch. Again, it’s a cost-benefit decision your team needs to think about.

Cheap and easy

If you don’t absolutely need to ship patches, you can avoid the costs of minor upgrades by simply using major upgrades. You can remove files without worrying about component-rule violations if you use an “early” scheduling of the standard action – before or immediately after the.

The MSI SDK notes that scheduling RemoveExistingProducts early is “inefficient” because the files that are same between the two product versions are removed and then reinstalled. But that inefficiency is what lets you remove files and components. If you schedule RemoveExistingProducts immediately before or after, MSI implements the major upgrade by installing the new version of the product “on top of” the previous version, upgrading files with newer versions, then removing the previous version. MSI increments the reference count of components in both packages during the installation of the newer version, then decrements it during the removal of the previous version. Component reference counting works only if component rules are followed, so it’s pretty much the same as minor upgrades.

If you have a large product, the size and install-time benefits of minor upgrade patches might be worth the development effort. Otherwise, major upgrades scheduled early are a great solution. Your call.

转载于:https://www.cnblogs.com/cindy-hu-23/p/4812425.html

转载地址:https://blog.csdn.net/weixin_30700977/article/details/95844160 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CentOS 7安装Mysql并设置开机自启动的方法
下一篇:关于swift 单元测试的补充

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月08日 13时00分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python转成c 语言_将Python对象转换为C void类型 2021-06-24
resin mysql_Eclipse+resin+mysql 安装及环境配置 2021-06-24
redis的使用 Java_java中使用redis 2021-06-24
java 数组元素位置_Java – 在数组中获取元素位置 2021-06-24
c 泛型与java泛型_C ++和Java中的“泛型”类型之间有什么区别? 2021-06-24
java 返回实体对象_java 封装返回结果实体类 返回结果以及错误信息 2021-06-24
java web 防止sql注入攻击_JavaWeb防注入知识点(一) 2021-06-24
java ssm 异常分类_SSM项目常见的异常与处理提示(一) 2021-06-24
java定义矩形类_Java定义矩形类 2021-06-24
java变量怎么变常量_Java的常量与变量是什么?怎么学习呀? 2021-06-24
java开发招聘试题_客户化开发招聘试题-Java开发.doc 2021-06-24
java jdk win10 1335_win10下安装java jdk,tomcat 2021-06-24
java list二分查找_java中的ArrayList和LinkedList的二分查找速度比 | 学步园 2021-06-24
php中的变量名称用什么表示,PHP变量,方法,类等名称中的有效字符是什么? 2021-06-24
pic32mx是什么cpu_PIC32MX单片机外设库使用(Ⅰ)- 系统时钟及I/O口基本设置 2021-06-24
用c 在mysql上存图片_C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob 2021-06-24
mysql 1045 28000_mysql报关于用户密码1045(28000),几种处理方法 (zhuan) 2021-06-24
solr比mysql的优势_Solr与Elasticsearch的优缺点比较总结和归纳 2021-06-24
华为博士招聘上机考试题目_牛客网-华为-2020届校园招聘上机考试-3 2021-06-24
python中for可以做变量名吗_Python中使用动态变量名的方法 2021-06-24