簡體   English   中英

WiX Toolset:如何在自定義操作中存儲來自二進制表的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM