首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取msp版本?

如何获取msp版本?
EN

Stack Overflow用户
提问于 2021-09-16 07:41:22
回答 1查看 46关注 0票数 0

我需要得到msp文件的版本。对于msi文件,我使用下面的代码:

代码语言:javascript
复制
 public static string GetMSIVersion(string MSIPath)
 {
    try
    {
        Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
        WindowsInstaller.Installer installer = (WindowsInstaller.Installer)
        Activator.CreateInstance(type);
        WindowsInstaller.Database db = installer.OpenDatabase(MSIPath, 0);
        WindowsInstaller.View dv = db.OpenView("SELECT `Value` FROM `Property` WHERE `Property`='ProductVersion'");
        WindowsInstaller.Record record = null;
        dv.Execute(record);
        record = dv.Fetch();
        string str = record.get_StringData(1).ToString();
       return str;
    }
    catch (Exception ex)
    {
        return "";
    }
}

但对于msp,它不起作用。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-12 07:04:25

OpenDatabase时需要指定MSP数据库类型,将0替换为MsiOpenDatabaseMode.msiOpenDatabaseModePatchFile (32)

然后,您可以接收msp内的所有表:

代码语言:javascript
复制
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
WindowsInstaller.Installer installer = (WindowsInstaller.Installer)Activator.CreateInstance(installerType);
Database database = installer.OpenDatabase(mspPath, 
MsiOpenDatabaseMode.msiOpenDatabaseModePatchFile);
View view = database.OpenView("SELECT * FROM `_Tables`");

view.Execute(null);
Record record = view.Fetch();
while (record != null)
{
     Console.WriteLine(record.StringData[1]);
     record = view.Fetch();
}

它应该包含列出there的补丁程序表。MSP文件中不能包含Property表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69204252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档