在InstallerCustomActions中使用ApplyTransform()时,“句柄无效”错误

时间:2014-10-31 13:05:36

标签: c# windows-installer

我尝试通过将变换应用到我的msi文件然后查询来从变换文件中获取属性。 我只在我的InstallerCustomActions项目中得到一个错误,在一个独立的项目中代码工作正常。

  

错误:句柄无效。      在Microsoft.Deployment.WindowsInstaller.Database.ApplyTransform(String 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;
        }
    }

编辑: 我试图从'属性'中检索自定义属性。安装程序表。 从我的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'");

我尝试制作我的安装程序的副本,然后尝试了上述功能,但它无法正常工作

1 个答案:

答案 0 :(得分:0)

这可能不受支持。 Microsoft发布包含Functions Not for Use in Custom ActionsMsiOpenDatabaseMsiDatabaseApplyTransform列表,其中包含new Microsoft.Deployment.WindowsInstaller.DatabasemsiDatabase.ApplyTransform()下的本机API调用。

但是,由于DTF的远程处理,我不确定这些呼叫到底发生了什么情况。如果调用发生在远程托管进程中,则无法解释您遇到的症状。相反,如果它们出现在Windows Installer拥有的本机线程中,则记录的限制是相关的。