我正在尝试在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”库。任何帮助都会很棒。
答案 0 :(得分:1)
快速阅读这个静态方法看起来是正确的,所以我创建了一个控制台应用程序。它在我的机器上对我很好。我会查看你的调用方法,并确保传递的数据是正确的。每当我有一个方法需要4个字符串作为参数时,我会非常紧张,因为在类型安全方面会留下很多需求。
答案 1 :(得分:0)
当CreateTransforms启动时,它会打开数据库并且不会关闭它... 在应用新转换之前,您必须提交并关闭数据库!
database.GenerateTransform(origDatabase, TRANSFORM);
database.CreateTransformSummaryInfo(origDatabase, TRANSFORM, TransformErrors.None, TransformValidations.None);
database.Commit();
database.Close();