我尝试通过将变换应用到我的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'");
我尝试制作我的安装程序的副本,然后尝试了上述功能,但它无法正常工作
答案 0 :(得分:0)
这可能不受支持。 Microsoft发布包含Functions Not for Use in Custom Actions和MsiOpenDatabase
的MsiDatabaseApplyTransform
列表,其中包含new Microsoft.Deployment.WindowsInstaller.Database
和msiDatabase.ApplyTransform()
下的本机API调用。
但是,由于DTF的远程处理,我不确定这些呼叫到底发生了什么情况。如果调用发生在远程托管进程中,则无法解释您遇到的症状。相反,如果它们出现在Windows Installer拥有的本机线程中,则记录的限制是相关的。