我用 C# 创建了一个自定义操作 (DTF)。
在那个 CA 中,我想从 msi 中提取一个文件(在 wix 中声明为二进制文件)并使用一些参数运行它。
我还没有找到任何样本或帮助。
我必须在 msi 上执行请求,但我想要一个样本。谢谢!
1958 次
1 回答
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 方法的代码可以从无处不在的 Jon Skeet 的这个答案中获取。请注意,如果您应该从 CA 执行此操作,您将引用数据库对象session.Database
,而不是创建它。
于 2011-11-07T09:52:56.607 回答