繁体   English   中英

WIX MSI:如果用户再次运行安装程序,我想向用户显示一条消息“产品已安装”

[英]WIX MSI: I Want to show a message to user "Product is already Installed" if user runs the installer again

我正在创建一个 MSI 安装程序,在测试过程中,如果我第一次运行安装程序,安装程序按预期工作。 但是当我不小心运行安装程序时,它卸载了我的文件。

因此,为此,我修改了条件并在操作条件中添加了 Remove="All"。

哪个工作正常,但我想向用户显示产品已安装的消息。

因此,为此,我添加了以下代码:

<Upgrade Id='<<Upgrade Code>>'>
  <UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
    Minimum='1.0.1' IncludeMinimum='yes' Maximum='1.0.1' IncludeMaximum='yes' />
  <UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
    Minimum='1.0.1' IncludeMinimum='no' />
</Upgrade>

<CustomAction Id='AlreadyUpdated' Error='[ProductName] is already installed.' />
    .....
    .....
    .....
    .....
    .....
<InstallExecuteSequence>
  <Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
</InstallExecuteSequence>

但是当运行这个时,安装程​​序仍然在第二次运行并且没有给出消息。

在检查日志时,可以看到“FindRelatedProducts”跳过了以下消息:

MSI (c) (F4:1C) [06:18:04:806]: Doing action: FindRelatedProducts
MSI (c) (F4:1C) [06:18:04:806]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:04: FindRelatedProducts. Searching for related applications
Action start 6:18:04: FindRelatedProducts.
MSI (c) (F4:1C) [06:18:04:806]: Skipping FindRelatedProducts action: not run in maintenance mode
Action ended 6:18:04: FindRelatedProducts. Return value 0.

MSI (s) (18:14) [06:18:05:500]: Running ExecuteSequence
MSI (s) (18:14) [06:18:05:500]: Doing action: FindRelatedProducts
MSI (s) (18:14) [06:18:05:500]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:05: FindRelatedProducts. Searching for related applications
Action start 6:18:05: FindRelatedProducts.
MSI (s) (18:14) [06:18:05:507]: Skipping FindRelatedProducts action: already done on client side
Action ended 6:18:05: FindRelatedProducts. Return value 0.

AlreadyUpdated 自定义操作中的条件也不满足。

MSI (s) (18:14) [06:18:05:737]: Doing action: PublishProduct
MSI (s) (18:14) [06:18:05:737]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:05: PublishProduct. Publishing product information
Action start 6:18:05: PublishProduct.
PublishProduct: 
MSI (s) (18:14) [06:18:05:752]: Re-publishing product - installing new package with existing product code.
Action ended 6:18:05: PublishProduct. Return value 1.
MSI (s) (18:14) [06:18:05:752]: Skipping action: AlreadyUpdated (condition is false)

有什么办法可以达到这个要求吗? 难道我做错了什么?

自定义操作复杂性:首先介绍自定义操作及其复杂性。 请阅读此处的第一段: 为什么在我的 WiX/MSI 设置中限制使用自定义操作是个好主意?


错误的调节:这基本上意味着您的条件不正确,因此自定义操作在它们不应该的安装模式下运行。 当您尝试使用复杂条件(或任何与此相关的条件)时,您应该测试多种安装模式: 1. fresh install 2. repair 3. modify 4. self-repair 5. patching 6. uninstall 7. major upgrade invoked uninstall等...

在您的情况下,一些自定义操作在维护运行以及全新/首次安装期间运行。 这是一个很常见的问题。 解决方案要么通过改进设置来消除自定义操作,要么改进条件,使它们在任何安装模式下都能实际工作。 明显地。

条件调试:条件很难做到正确。 我喜欢使用消息框测试它们。 此处的底部显示了如何执行此操作如何仅在安装和修改时执行有条件的自定义操作? - 然后在不同模式下运行安装程序并查找对话框。 当它们出现时,自定义操作的条件为真。

复杂条件:这是关于为什么旧的自定义操作用于新设置的答案: Wix 工具更新使用旧的自定义操作

意外的行为:在属性的特殊音符UPGRADINGPRODUCTCODEWIX_UPGRADE_DETECTED 请阅读: 仅在卸载期间而不是在主要升级期间运行 Wix 自定义操作- 这些怪癖会影响自定义操作在主要升级方案期间运行的次数。 这里有一些非常令人惊讶的效果。 用你的消息框调试?

链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM