我正在尝试为我的应用程序实现以下自我更新机制:如果有可用的更新,我的应用程序会下载(WiX生成的)MSI包并将其写入具有任意名称的AppData文件夹。然后,应用程序通过调用
启动更新过程msiexec /fvomus "<ArbitraryName>.msi" /qn /L "<ArbitraryName>.msi.log" REINSTALL=ALL REINSTALLMODE=vomus
有了这个,我得到一个错误1316,然后安装终止,错误状态为1603。
MSI的原始文件名为CCWirelessServer.msi
,但正如我之前所说,我的应用程序使用任意名称编写安装程序包,例如ba17b82d-0ab8-4fc9-aea8-62830042d49f.msi
。现在我注意到Windows Installer出于某种原因寻找CCWirelessServer.msi
文件而不是正确的临时文件名。您可以在下面的日志中看到这一点。
为什么Windows Installer不使用我通过命令行提供的文件名?我的命令行参数或安装程序包是一个问题吗?
这是日志:
=== Logging started: 24.02.2014 09:16:30 ===
Action start 09:16:30: INSTALL.
Action start 09:16:30: FindRelatedProducts.
Action ended 09:16:30: FindRelatedProducts. Return value 0.
Action start 09:16:30: ValidateProductID.
Action ended 09:16:30: ValidateProductID. Return value 1.
Action start 09:16:30: CostInitialize.
Action ended 09:16:30: CostInitialize. Return value 1.
Action start 09:16:30: FileCost.
Action ended 09:16:30: FileCost. Return value 1.
Action start 09:16:30: CostFinalize.
Action ended 09:16:30: CostFinalize. Return value 1.
Action start 09:16:30: MigrateFeatureStates.
Action ended 09:16:30: MigrateFeatureStates. Return value 0.
Action start 09:16:30: InstallValidate.
Action ended 09:16:30: InstallValidate. Return value 1.
Action start 09:16:30: RemoveExistingProducts.
Action ended 09:16:30: RemoveExistingProducts. Return value 0.
Action start 09:16:30: InstallInitialize.
Action ended 09:16:30: InstallInitialize. Return value 1.
Action start 09:16:30: ProcessComponents.
Action ended 09:16:30: ProcessComponents. Return value 1.
Action start 09:16:30: UnpublishFeatures.
Action ended 09:16:30: UnpublishFeatures. Return value 1.
Action start 09:16:30: RemoveRegistryValues.
Action ended 09:16:30: RemoveRegistryValues. Return value 1.
Action start 09:16:30: RemoveShortcuts.
Action ended 09:16:30: RemoveShortcuts. Return value 1.
Action start 09:16:30: CAUninstallAsService.
Action ended 09:16:30: CAUninstallAsService. Return value 1.
Action start 09:16:30: RemoveFiles.
Action ended 09:16:30: RemoveFiles. Return value 1.
Action start 09:16:30: InstallFiles.
Action ended 09:16:30: InstallFiles. Return value 1.
Action start 09:16:30: CAInstallAsServiceRollback.
Action ended 09:16:30: CAInstallAsServiceRollback. Return value 1.
Action start 09:16:30: CAInstallAsService.
Action ended 09:16:30: CAInstallAsService. Return value 1.
Action start 09:16:30: CreateShortcuts.
Action ended 09:16:30: CreateShortcuts. Return value 1.
Action start 09:16:30: WriteRegistryValues.
Action ended 09:16:30: WriteRegistryValues. Return value 1.
Action start 09:16:30: RegisterUser.
Action ended 09:16:30: RegisterUser. Return value 0.
Action start 09:16:30: RegisterProduct.
MSI (s) (4C:50) [09:16:30:406]: Product: Wireless Server -- Error 1316. A network error occurred while attempting to read from the file: C:\ProgramData\MyCompanyName\Wireless Server\Updates\CCWirelessServer.msi
Error 1316. A network error occurred while attempting to read from the file: C:\ProgramData\MyCompanyName\Wireless Server\Updates\CCWirelessServer.msi
Action ended 09:16:30: RegisterProduct. Return value 3.
Action ended 09:16:30: INSTALL. Return value 3.
MSI (s) (4C:50) [09:16:30:419]: Windows Installer reconfigured the product. Product Name: Wireless Server. Product Version: 1.0.0.0. Product Language: 1033. Manufacturer: MyCompanyName. Reconfiguration success or error status: 1603.
=== Logging stopped: 24.02.2014 09:16:30 ===
修改1:
只是为了验证问题是否使用任意文件名我尝试使用安装程序的原始文件名编写更新包,它可以正常工作!
答案 0 :(得分:4)
不支持尝试更改MSI的文件名并执行次要升级。参见:
Windows Installer Best Practices
保持包名称和包裹代码一致。
.msi文件可以任意命名,以帮助用户识别 包,但名称不应更改而不更改 产品代码。
•为.msi文件提供一个用户友好名称,使用户可以使用 标识Windows Installer程序包的内容。
•产品代码是应用程序的主要标识 并且必须在全面更新时更改 应用。有关信息,请参阅ProductCode和更改产品 码。更改应用程序的.msi文件的名称被视为a 全面改变并始终需要相应的改变 产品代码以保持一致性。
•包裹代码是安装人员使用的主要标识符 搜索并验证给定安装的正确包。 没有两个不相同的.msi文件应该具有相同的包代码。 如果在不更改包代码的情况下更改包,则 如果两者仍然可访问,则安装程序可能不会使用较新的包 安装程序。包裹代码存储在修订号中 摘要信息流的摘要属性。
•请注意,产品代码和包裹代码GUID中的字母必须全部为 大写。
如果满足以下任何条件,则必须更改产品代码 更新:
•原始产品和更新产品共存 同样的系统必须是可能的。
•.msi文件的名称已更改。
•现有组件的组件代码已更改。
•从现有功能中删除组件。
•现有功能已成为现有功能的子功能 特征
•现有子功能已从其父功能中删除。
Why does changing the name of your MSI file require a Major Upgrade?