簡體   English   中英

如何使用CustomAction在WIX中設置目錄路徑?

[英]How to set a Directory path in WIX using CustomAction?

我在WIX中有這樣的目錄結構

<Directory Id="TARGETDIR" Name="SourceDir" >
  <Directory Id="XXXFOLDER" Name="XXX">
    <Directory Id="YYYFOLDER" Name="YYY">
      <Directory Id="MAINFOLDER" Name="MAIN">

現在,此MAINFOLDER目錄解析為D:\\ XXX \\ YYY \\ MAIN \\

我從解析為E:\\ XXX \\ YYY \\ MAIN的服務獲取MAINFOLDER的路徑,我還在cs文件中分配了customAction以下是代碼

[CustomAction]

    public static ActionResult GetNewDataPath(Session session)
    {

        sNewDataDir = xxxservice.GetPath();
        if (!String.IsNullOrEmpty(sNewDataDir.ToString()))
        {
            sNewDataDir+= "\\MAIN\\";
        }

        session["MAINFOLDER"] = sNewDataDir;
        return ActionResult.Success;
    }

我的自定義操作如下:

<CustomAction Id="GETDATAPATH" BinaryKey="InstallerCA"      
  DllEntry="GetNewDataPath" Execute="immediate"/>

這是安裝順序:

<Custom Action="GETDATAPATH" Before="CostFinalize" />

sNewDataDir包含此值=“ E:\\ XXX \\ YYY \\ MAIN”,我分配給session [“ MAINFOLDER”]。 它被分配。 但這並沒有反映在WIX上,因為盡管我的文件仍被復制到D:\\ XXX \\ YYY \\ Main,盡管將其分配給E:\\ XXX \\ YYY \\ Main。 我們如何使用CustomAction更改會話[“ MAINFOLDER”]的目錄路徑?

通常是順序問題。 每個MSDN的CostFinalize操作期間,將屬性的值分配給目錄路徑。 您上面的自定義操作必須在CostFinalize按執行序列運行之前的某個時間進行排序。

這也可以是特權問題:MAINFOLDER可能是受限制的公共屬性,並且沒有使其成為執行序列(如果您的自定義操作按執行序列運行,則不適用)。 閱讀有關受限制的公共屬性的信息,以查看是否可能是您遇到的問題。

而且它也可以是您的計算機的防病毒一些其他問題與腳本引擎。

要有一個好主意(或至少找到可以弄清問題根源的其他人),您將需要為失敗的嘗試生成良好的日志。 大多數時候, voicewarmup (或/ l * v)是使用的最佳價值(往往會給您帶來最大但並非全部的需求,以及您不需要的東西太多),也是大多數安裝的價值開發專家在生成他們使用和共享的日志時使用。 但是,它確實會減慢您的安裝速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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