假设您有一个从某处下载的安装程序(不是wix安装程序)。你如何知道安装程序的升级代码,以便你可以在你准备的新安装程序的升级代码部分填写它?
我可以从注册表学习吗?所以问题基本上是,如何知道安装在计算机中的程序的升级码。
实际上我的问题是我的产品已经安装了另一个安装程序,我现在正试图将它移动到wix安装程序。但是,我在以前的安装程序中找不到升级代码,我想从已安装的软件中找到它。
谢谢。
正如我向WiX用户发布的:
我看到这是通过让升级从注册表中获得卸载字符串来完成的,其中应该有一个您可以使用的命令,因为它不是基于msi的。您是否应该在UI序列中调用它,还是在执行序列中调用它,或者两者都调用,取决于您对静默安装的需求,这意味着您需要在执行序列中静默地执行它,并且可能需要更改卸载命令以使其静默。
如果安装有一个标准的卸载快捷方式,你可以从中获得命令,那么同样的想法应该是有效的。无论哪种方式,您都只是使用CA来运行外部程序,或者可能是UtilCAQuietExec之类的东西。
假设它是基于Windows Installer的安装程序(WiX, InstallShield等),您可以使用ORCA编辑它并查看属性表以查看它的UpgradeCode。如果它被打包为自解压安装程序,您可能必须先将其解压。
您也可以查询MSI API或在注册表(HKCRInstaller)中查看此信息。如果你去注册表的路线,它可能是最简单的查看产品/GUID/Sourcelist键,并跟踪到一个缓存的MSI,并在ORCA中查看它。否则,您必须学习如何连接不同的数据集,并将达尔文转换的GUID转换回原始GUID格式。
启动PowerShell(以admin身份运行)并运行此命令以获得产品代码:
的已安装产品的列表Get-WmiObject Win32_Product | Format-Table Name, LocalPackage
您将获得所有已安装的MSI产品的列表,以及指向本地缓存的MSI数据库的奇怪路径。它通常看起来像这样:
C:WindowsInstaller235bbf8.msi
235 bbf8。msi文件名是随机的
,对于每个安装的产品会有所不同。它是您最初安装的MSI文件的缓存副本。它不包含cab文件(或者至少在旧版本的Windows中不包含)。您可以通过选择 file -> open ,然后将完整路径粘贴到文件打开对话框中,然后按"打开",以Orca中的随机名称打开该文件。不做任何更改,但检查属性表中的升级代码。您也可以使用其他MSI工具,如Installshield。
注意路径C:WindowsInstaller是"super protected",在启用显示隐藏文件夹和禁用保护操作系统文件选项之前,在Windows资源管理器中甚至是不可见的。我仍然相信你可以直接打开文件,如果你把整个路径粘贴到Orca -不需要通过Windows资源管理器。