WIX MSI:如果用户再次运行安装程序,我想向用户 "Product is already Installed" 显示一条消息

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>

但是当 运行ning 时,安装程​​序仍然是第二次 运行ning 而没有给出消息。

检查日志时,可以看到“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)

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

Custom Action Complexity: First a word on custom actions and their complexity. Please read the first paragraphs here:


Wrong Conditioning:这基本上意味着您的条件不正确,因此安装模式中的自定义操作 运行不是。当您尝试使用复杂条件(或与此相关的任何条件)时,您应该测试多种安装模式:1. fresh install2. repair3. modify4. self-repair5. patching6. uninstall7. major upgrade invoked uninstall、等等...

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

条件调试:条件很难搞定。我喜欢使用消息框来测试它们。此处的底部部分显示了如何执行此操作: - 然后您 运行 在不同模式下进行设置并查找对话框。当他们出现时,自定义操作的条件为真。

复杂条件: 以下是关于为什么旧的自定义操作用于新设置的答案:.

意外行为:关于属性UPGRADINGPRODUCTCODEWIX_UPGRADE_DETECTED。请阅读:Run Wix Custom action only during uninstall and not during Major upgrade - 这些怪癖会影响主要升级场景中自定义操作 运行 的次数。这里有一些非常令人惊讶的效果。用你的消息框调试?

链接:

  • wix installer update process and confirmation dialog
  • WIX CustomAction conditions