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 install
、2. repair
、3. modify
、4. self-repair
、5. patching
、6. uninstall
、7. major upgrade invoked uninstall
、等等...
在您的情况下,一些自定义操作 运行 维护 运行 以及全新/首次安装期间。这是一个很常见的问题。解决方案要么是通过改进设置来消除自定义操作,要么是改进条件,使它们在任何安装模式下都能正常工作。很明显。
条件调试:条件很难搞定。我喜欢使用消息框来测试它们。此处的底部部分显示了如何执行此操作: - 然后您 运行 在不同模式下进行设置并查找对话框。当他们出现时,自定义操作的条件为真。
复杂条件:
以下是关于为什么旧的自定义操作用于新设置的答案: .
- 还有一个答案列出了不同安装模式下常见属性的一些值:How to add a WiX custom action that happens only on uninstall (via MSI)?
- Installshield 有这个常见条件的 PDF(其中一些是 Installshield 特定的):https://resources.flexera.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf
意外行为:关于属性UPGRADINGPRODUCTCODE
和WIX_UPGRADE_DETECTED
。请阅读:Run Wix Custom action only during uninstall and not during Major upgrade - 这些怪癖会影响主要升级场景中自定义操作 运行 的次数。这里有一些非常令人惊讶的效果。用你的消息框调试?
链接:
- wix installer update process and confirmation dialog
- WIX CustomAction conditions
我正在创建一个 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 install
、2. repair
、3. modify
、4. self-repair
、5. patching
、6. uninstall
、7. major upgrade invoked uninstall
、等等...
在您的情况下,一些自定义操作 运行 维护 运行 以及全新/首次安装期间。这是一个很常见的问题。解决方案要么是通过改进设置来消除自定义操作,要么是改进条件,使它们在任何安装模式下都能正常工作。很明显。
条件调试:条件很难搞定。我喜欢使用消息框来测试它们。此处的底部部分显示了如何执行此操作:
复杂条件:
以下是关于为什么旧的自定义操作用于新设置的答案:
- 还有一个答案列出了不同安装模式下常见属性的一些值:How to add a WiX custom action that happens only on uninstall (via MSI)?
- Installshield 有这个常见条件的 PDF(其中一些是 Installshield 特定的):https://resources.flexera.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf
意外行为:关于属性UPGRADINGPRODUCTCODE
和WIX_UPGRADE_DETECTED
。请阅读:Run Wix Custom action only during uninstall and not during Major upgrade - 这些怪癖会影响主要升级场景中自定义操作 运行 的次数。这里有一些非常令人惊讶的效果。用你的消息框调试?
链接:
- wix installer update process and confirmation dialog
- WIX CustomAction conditions