C# 如何从C语言的主项目中获取InstallShield项目的产品版本#

C# 如何从C语言的主项目中获取InstallShield项目的产品版本#,c#,installshield,C#,Installshield,在我的soltuion VS中,我有一个C#项目和一个InstallShield项目 我想获得InstallShield的产品版本: 但从我的C#项目来看,像这样: string Version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 但它是installshield的汇编版本,而不是产品版本 可以使用新的参考COM:InstallShield 22自动化接口 使用此代

在我的soltuion VS中,我有一个C#项目和一个InstallShield项目

我想获得InstallShield的产品版本:

但从我的C#项目来看,像这样:

string Version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
但它是installshield的汇编版本,而不是产品版本

可以使用新的参考COM:InstallShield 22自动化接口

使用此代码

var ISObject = new ISWiAuto22.ISWiProject();
ISObject.OpenProject(@strPath);
var version = ISObject.ProductVersion;

但对于InstallShield Limped版本,我们无法做到这一点。要使用OpenProject,项目文件必须是.ism,而我的是.isl,因此我得到一个错误:*此项目是使用早期版本的InstallShield Developer、InstallShield-Windows Installer或InstallShield Express创建的。*

您可以使用InstallShield的COM接口来解析is项目文件

VBS示例:

Public Sub UpdateInstallerProductCode(strPath, strProductCode)
Dim objISWiProject

' Load InstallShield project
Set objISWiProject = CreateObject("ISWiAuto19.ISWiProject")
objISWiProject.OpenProject strPath

' Set new product code
objISWiProject.ProductCode = "{" & strProductCode & "}"

' Save and close InstallShield project
objISWiProject.SaveProject
objISWiProject.CloseProject
Set objISWiProject = Nothing
End Sub

我讨厌VB/S:)

它不工作,我让你看看我在顶部的帖子:/对不起,我太粗心了。是的,在我的计算机上,我甚至不能创建新的ISWiAuto22.ISWiProject(),我马上有个COM异常。LE版本中缺少命令行。我建议手动解析ISL文件,如果您只需要获取产品版本,它就没有那么复杂了。根据项目是以二进制还是XML格式保存的,您可以使用MSI API查询ISM(ISM是MSI向后的..它只是一个MSI数据库)或XPath查询XML(DTD格式)。您是在生成期间还是在安装并运行产品后尝试执行此操作?