首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止用户基于注册表搜索卸载应用程序

防止用户基于注册表搜索卸载应用程序
EN

Stack Overflow用户
提问于 2014-09-12 16:04:52
回答 2查看 48关注 0票数 1

我已经使用WIX3.8创建了3个独立的MSI文件

第一个MSI包是安装基本(核心)组件的核心包。

另外两个MSI包被添加到第一个MSI上。我已经将必要的检查放在适当的地方,这将防止用户安装附加组件,如果基本组件没有安装。

现在的问题是,在安装附加组件时,如何防止用户卸载核心组件?

我在安装每个MSI时添加了特定的注册表项,以便可以引用它们。

我在谷歌上花了两天多的时间,但没有找到任何解决方案:(。如果我错过了什么,请给我提供参考链接。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2014-09-12 20:19:58

使用带有其他插件组件升级代码的升级元素来检测其他产品。

例如,在核心组件安装程序中添加如下内容

代码语言:javascript
复制
<Upgrade Id ="Addon Product A's Upgrade GUID">
  <UpgradeVersion OnlyDetect="yes" Minimum="0.0.0.0" Property="ADDONADETECTED" IncludeMinimum="no" />
</Upgrade>

<Upgrade Id ="Addon Product B's Upgrade GUID">
 <UpgradeVersion OnlyDetect="yes" Minimum="0.0.0.0" Property="ADDONBDETECTED" IncludeMinimum="no" />
</Upgrade>

<Condition Message="There are other products that depend on these components, aborting uninstall.">
  <![CDATA[ADDONADETECTED OR ADDONBDETECTED AND (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")]]>
</Condition>
票数 0
EN

Stack Overflow用户

发布于 2014-09-12 23:25:03

我会:

  1. 将ARPSYSTEMCOMPONENT添加到这些MSI文件中,这样它们就不会显示在程序和功能中。
  2. 假设您允许正常的主要升级,让捆绑包使用命令行参数(如BUNDLEUNINSTALL=1 )执行卸载,然后使用类型19自定义操作,如果REMOVE=为“ALL”且为BUNDLEUNINSTALL<>1,则会阻止卸载继续。
  3. 我不确定注册表搜索是否提供了一个好的解决方案。我将使用基于MsiEnumRelatedProducts (使用这些组件的其他产品的升级解码)的自定义操作来查找这些产品的ProductCodes。如果您得到了一些ProductCodes,那么您可以调用类型19自定义操作来阻止卸载。总的来说,Rick的建议是好的,但我认为您应该采用的策略是使用捆绑包。这类东西:http://wixtoolset.org/documentation/manual/v3/xsd/dependency/provides.html
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25803563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档