代码之家  ›  专栏  ›  技术社区  ›  KIS

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

  •  -1
  • KIS  · 技术社区  · 10 年前

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

    我读到了 MsiGetProductInfo(获取产品信息) (),但在示例代码c#中找不到任何应用程序。

    谢谢

    2 回复  |  直到 10 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    您指的是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这样的东西在msi中定义。h,值为“VersionString”。

    本示例中还应包含足够的信息:

    MSI Interop using MSIEnumRelatedProducts and MSIGetProductInfo

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

        2
  •  0
  •   Andrey Marchuk    10 年前

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