';句柄无效';在InstallerCustomActions中使用ApplyTransform()时出错

本文关键字:ApplyTransform 出错 句柄 无效 InstallerCustomActions | 更新日期: 2023-09-27 18:28:47

我试图通过将转换应用到我的msi文件,然后查询它来从转换文件中获取属性。我只在InstallerCustomActions项目中遇到错误,在独立项目中,代码运行良好。

错误:句柄无效。位于Microsoft.Deployment.WindowsInstaller.Database.ApplyTransform(字符串transformFile,TransformErrors errorConditionsToSuppress)

using Microsoft.Deployment.WindowsInstaller;
public string FetchPropertyValue(string installerFile, string transformsFile, string query)
    {
        Database msiDatabase = null;
        View view = null;
        using (msiDatabase = new Database(installerFile, DatabaseOpenMode.ReadOnly))
        {
            msiDatabase.ApplyTransform(transformsFile);
            string sqlQuery = query;
            view = msiDatabase.OpenView(sqlQuery);
            view.Execute(null);
            Record record = view.Fetch();
            string strResult = String.Empty;
            try
            {
                record.GetString(2);
            }
            catch { }
            return strResult;
        }
    }

编辑:我正在尝试从安装程序的"Property"表中检索自定义属性。从我的Commit方法调用此函数

 public override void Commit(System.Collections.IDictionary savedState)
    {
        base.Commit(savedState);
    ....
string strServer = FetchPropertyValue(installerFile,transformsFile, "Select `Property`,`Value` FROM `Property` where `Property`='Server'");

我试着复制我的安装程序,然后尝试上面的功能,但它不起作用

';句柄无效';在InstallerCustomActions中使用ApplyTransform()时出错

这可能不受支持。Microsoft发布了一个不用于自定义操作的函数列表,其中包括MsiOpenDatabaseMsiDatabaseApplyTransform,这两个函数又是new Microsoft.Deployment.WindowsInstaller.DatabasemsiDatabase.ApplyTransform()的本机API调用。

然而,由于DTF的远程处理,我不确定这些调用究竟发生在什么上下文中。如果调用发生在远程托管进程中,这将无法解释您遇到的症状。如果它们出现在Windows Installer拥有的本机线程中,则文档中的限制是相关的。