我用C#创建了一个自定义动作(DTF)
在那个CA中,我想从msi中提取一个文件(在wix中声明为Binary)并用一些参数运行它。
我没有找到任何样品或帮助。
我必须在msi上执行请求,但我想要一个示例。谢谢!
答案 0 :(得分:2)
DTF.chm有一个示例如何更新二进制表。它位于“使用MSI数据库”主题中。你可以猜测如何进行相反的操作。代码可能如下所示:
using (var db = new Database("test.msi", DatabaseOpenMode.Direct))
{
using (var view = db.OpenView("SELECT `Data` FROM `Binary` WHERE `Name` = '{0}'", "testbinary"))
{
view.Execute();
var rec = view.Fetch();
var inStream = rec.GetStream("Data");
if (inStream != null)
{
using (var file = File.OpenWrite("S:\\testfile.zip"))
{
CopyStream(inStream, file);
}
}
}
}
CopyStream方法的代码可以从this answer of omnipresent Jon Skeet获取。请注意,如果您应该从CA执行此操作,则将引用数据库对象,如session.Database
,而不是创建它。