如何使用c#为.msi文件创建转换

时间:2014-01-03 08:57:33

标签: c# windows-installer

我正在尝试在C#中创建.msi文件的转换。这是我的代码:

 public static void CreateTransforms(string original_MSI, string backup_MSI, string MSTpath, string query)
    {
        File.Copy(original_MSI, backup_MSI, true);
        using (var origDatabase = new Microsoft.Deployment.WindowsInstaller.Database(original_MSI, DatabaseOpenMode.ReadOnly))
        {
            using (var database = new Microsoft.Deployment.WindowsInstaller.Database(backup_MSI, DatabaseOpenMode.Direct))
            {
                //database.Execute("Update `Property` Set `Property`.`Value` = 'Test' WHERE `Property`.`Property` = 'ProductName'");
                database.Execute(query);
                database.GenerateTransform(origDatabase, MSTpath);
                database.CreateTransformSummaryInfo(origDatabase, MSTpath, TransformErrors.None, TransformValidations.None);
            }
        }
    }

我收到以下错误:“无法打开此安装包。请与应用程序供应商联系以验证这是否是有效的Windows Installer程序包。”在步骤中创建转换摘要信息。我使用了“Microsoft.Deployment.WindowsInstaller.dll”库。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

快速阅读这个静态方法看起来是正确的,所以我创建了一个控制台应用程序。它在我的机器上对我很好。我会查看你的调用方法,并确保传递的数据是正确的。每当我有一个方法需要4个字符串作为参数时,我会非常紧张,因为在类型安全方面会留下很多需求。

答案 1 :(得分:0)

当CreateTransforms启动时,它会打开数据库并且不会关闭它... 在应用新转换之前,您必须提交并关闭数据库!

                database.GenerateTransform(origDatabase, TRANSFORM);
                database.CreateTransformSummaryInfo(origDatabase, TRANSFORM, TransformErrors.None, TransformValidations.None);
                database.Commit();
                database.Close();
相关问题