[英]WiX Toolset: How to store a file from Binary Table in a Custom Action
我想將文件從二進制表存儲到“定制操作”中的臨時位置。 我有兩個自定義操作,第一個是“立即”,另一個是“延遲”。
在運行“立即”自定義操作的過程中,我調用Microsoft.Deployment.WindowsInstaller.Record.GetStream方法時,該方法不會保存文件。
[CustomAction]
public static ActionResult ImmediateAction(Session session)
{
try
{
View view = db.OpenView("SELECT Name, Data FROM Binary");
view.Execute();
foreach (Record row in view)
{
row.GetStream("Data", Path.Combine(Environment.GetEnvironmentVariable("temp"), row.GetString("Name"));
}
return ActionResult.Success;
}
catch (Exception ex)
{
session.Log(ex.Message);
return ActionResult.Failure;
}
finally
{
db.Close();
}
}
自定義操作可以正常工作,但是不會創建文件。
更新:
在InstallExecuteSequence中,自定義操作描述如下:
<InstallExecuteSequence>
<Custom Action="ImmediateAction"
Before="DeferredAction">
NOT Installed
</Custom>
<Custom Action="DeferredAction"
After="InstallInitialize">
NOT Installed
</Custom>
</InstallExecuteSequence>
從“延遲”自定義操作中,我無法獲得數據庫視圖,這是預期的。 而且,由於System.IO.Stream類不支持序列化,因此我無法將文件的二進制數據從“立即”傳遞給“延遲”自定義操作。
優秀的亞歷克斯。 感謝您的反饋。 原始問題的解決方案是調用View()對象的Fetch()方法: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/aa372509 ( v=vs.85)。 aspx
tempFile = Path.GetTempFileName();
using (View binaryView = session.Database.OpenView("SELECT Name, Data FROM Binary"))
{
binaryView.Execute();
using (Record binaryRec = binaryView.Fetch())
{
binaryRec.GetStream(2, tempFile);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.