我有一个应用程序,需要知道它是否已升级。所以我想用安装程序编写一个注册表项,然后可以从应用程序中读取。我尝试通过将以下组件添加到安装程序来实现此目的:
<Component Id ="Registry_IsUpgraded">
<Condition>Installed AND UPGRADINGPRODUCTCODE</Condition>
<RegistryValue Id="RegKey_IsUpgraded" Root="HKLM"
Key="SOFTWARE\Microsoft\Office\Excel\AddIns\websmsExcelAddIn"
Name="IsUpgraded" Value="yes"
Type="string" />
</Component>
但是,升级期间不会写入注册表项。在msi日志中,我找到了这一行:
Component: Registry_IsUpgraded; Installed: Absent; Request: Local; Action: Null
我认为Action: Null
表示不会安装该组件,因为升级期间安装的其他组件的Action
为Local
。
但为什么这是为什么我的注册表项没有写?是否有更好/更简单的方法告诉我的应用程序它已升级?
答案 0 :(得分:1)
已安装且UPGRADINGPRODUCTCODE始终评估为false,因为在主要升级期间(由UPGRADINGPRODUCTCODE指示),新产品根据定义尚未安装。
我认为您的应用程序需要在每次升级后首次运行时执行某些操作,是吗?如果是这样,只需将ProductCode属性写入注册表值,然后在应用程序代码中检测到值已更改时触发事件。这将简化您的安装程序要求。