Pet*_*váč 3 windows-installer wix failed-installation
我可以通过 WIX 创建 MSI -> 我们将它安装在 IIS 上。发生了什么 - 我们已经安装了一些版本的应用程序,比如说 1.8,然后我们安装了版本,比如说 99.0,只是为了测试目的,然后我们卸载了这个 99 版本。然后我尝试安装其他版本并获得:已经安装了该产品的较新版本。
然后我尝试更改产品的升级代码 - 并再次制作高版本,然后卸载并安装较低版本 - 它工作正常。
所以我觉得我错过了一些东西 - 附加信息是在程序和功能列表中我在卸载后找不到更高的应用程序 - 那么我的问题是安装程序如何评估有更新版本?有关安装(和用于比较)的信息究竟存储在哪里以及如何有效和轻松地访问它们?这样我就可以直视了吗?
ProductCode 标识特定产品。每次您运送新的替换产品时,它都会发生变化。UpgradeCode 通过在预计版本不断增加的更新产品中使用相同的 UpgradeCode 来定义一系列产品。默认情况下,新产品版本会通过重大升级替换旧产品版本。因为 upgradecode 定义了一个产品系列,Windows 将寻找具有相同 UpgradeCode 的产品,因为相同的 UpgradeCodes 意味着相互排斥的产品,使用它们用新产品替换旧产品。在 WiX 中,主要升级是通过 Majorupgrade 元素完成的,您可能正在使用该元素,因为您会收到“安装了较新版本”的消息。如果您想“升级”到较低版本,则有一个 AllowDowngrade 选项。
产品版本(如文件版本)不仅仅是有用的信息——系统使用它们时,系统会理解新的替换旧的,并且通常返回较低版本是一件坏事,这就是默认行为不允许降级的原因。
这个脚本可能会有所帮助。它使用 Windows Installer 脚本 API 来枚举所有已安装的产品,显示版本、用户 sid、产品代码等:
Option Explicit
Public installer, fullmsg, comp, prod, a, fso, pname, ploc, pid,contxt, sid, psorce, pcache, pvers
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.CreateTextFile("prodex.txt", True)
' Connect to Windows Installer object
Set installer = CreateObject("WindowsInstaller.Installer")
a.writeline ("Products")
'on error resume next
For Each prod In installer.ProductsEx("", "", 7)
pid = prod.ProductCode
contxt = prod.Context
sid=prod.usersid
pname = prod.InstallProperty("ProductName")
psorce = prod.InstallProperty("InstallSource")
ploc =prod.InstallProperty("InstallLocation")
pcache = prod.InstallProperty("LocalPackage")
pvers=prod.InstallProperty("VersionString")
a.writeline (pid & " " & pname & " " & pvers & " installed at <" & ploc & "> from " & psorce & " Context " & contxt & " Local " & pcache)
NextRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |