从Windows安装程序项目中读取产品编号

本文关键字:读取 编号 项目 Windows 安装 程序 | 更新日期: 2024-09-27 01:10:42

我需要获得我的安装项目的产品编号,我使用InstalledShield创建.exe.

我在安装程序API中了解到MsiGetProductInfo(),但在示例代码c#中找不到任何应用程序。

谢谢。

从Windows安装程序项目中读取产品编号

您指的是MsiGetProductInfo,所以我假设您有一个Windows Installer MSI文件,您的exe安装了该文件(因为它引导先决条件),并且您希望在安装完安装程序后获得信息。

这是p/invoke签名:

DllImport("msi.dll", CharSet=CharSet.Unicode)]
static extern Int32 MsiGetProductInfo(string product, 
  string property, [Out] StringBuilder valueBuf, ref Int32 len)

基本上,Product是MSI的ProductCode guid,它是由{}个括号包围的字符串。

你还没有发布任何你可能尝试过的代码,所以不可能诊断出你可能遇到的任何问题。如果你所说的"产品编号"是指版本,那么你可以使用这里记录的任何值:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370130(v=vs.85).aspx

其中像INSTALLPROPERTY_VERSIONSTRING这样的东西是在Windows SDK的msi.h中定义的,值为"VERSIONSTRING"。

在这个例子中应该有足够多的信息:

使用MSIEnumRelatedProducts和MSIGetProductInfo 的MSI互操作

升级时,许多不同ProductCode的UpgradeCode通常保持不变,因此,如果在UpgradeCode上使用MsiEnumRelatedProducts返回ProductCode,然后将该ProductCode插入MsiGetProductInfo,则代码不会发生太大变化。

MsiGetProductInfo无法工作,因为安装程序是使用Wix引导程序构建的。您可以做的是,使用任何归档器打开可执行文件(最终是一个归档文件)并解析名为0的文件,这是一个XML文件,这有点像黑客。你可以在那里找到所有的信息,比如版本、产品名称、产品密钥等等