';句柄无效';在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'");
我试着复制我的安装程序,然后尝试上面的功能,但它不起作用
这可能不受支持。Microsoft发布了一个不用于自定义操作的函数列表,其中包括MsiOpenDatabase
和MsiDatabaseApplyTransform
,这两个函数又是new Microsoft.Deployment.WindowsInstaller.Database
和msiDatabase.ApplyTransform()
的本机API调用。
然而,由于DTF的远程处理,我不确定这些调用究竟发生在什么上下文中。如果调用发生在远程托管进程中,这将无法解释您遇到的症状。如果它们出现在Windows Installer拥有的本机线程中,则文档中的限制是相关的。