【发布时间】:2011-11-07 08:19:32
【问题描述】:
我使用 C# 创建了一个自定义操作 (DTF)。
在那个 CA 中,我想从 msi 中提取一个文件(在 wix 中声明为二进制文件)并使用一些参数运行它。
我还没有找到任何样本或帮助..
我必须在 msi 上执行一个请求,但我想要一个样本。谢谢!
【问题讨论】:
我使用 C# 创建了一个自定义操作 (DTF)。
在那个 CA 中,我想从 msi 中提取一个文件(在 wix 中声明为二进制文件)并使用一些参数运行它。
我还没有找到任何样本或帮助..
我必须在 msi 上执行一个请求,但我想要一个样本。谢谢!
【问题讨论】:
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 这样的数据库对象,而不是创建它。
【讨论】: