簡體   English   中英

WIX-根據預處理程序變量更改APPLICATIONFOLDER

[英]WIX - Changing APPLICATIONFOLDER based on Preprocessor Variable

我有一個WIX MSI項目,該項目用於我們產品的不同口味,因此我有各種聲明要根據產品的口味/類型做事,並且知道一切似乎都按預期進行。 但是,現在已經決定需要將其中一種口味安裝在其他位置(實際上是安裝到其他公司的安裝文件夾中-由於我們的應用程序不是GAC的),但是我現在正在嘗試一些“有趣”的嘗試實現這一點。

我有一個目錄結構,類似於:

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="COMPANYFOLDER" Name="FirstCompany">
         <Directory Id="APPLICATIONFOLDER" Name="FirstProduct"  >

就目前而言,這很好-它會安裝到Program Files \\ FirstCompany \\ FirstProduct中。

但是我有一個稱為FLAVOR的PreProcessor變量,可以為1或2。如果為1,那么我想安裝到上述結構中; 但如果是2,我想安裝到Program Files \\ SecondCompany \\ SecondProduct

如果基本上是2,那么我們實際上將安裝到另一家公司的安裝位置。

我已經嘗試了各種方法來實現此目的,例如:

<?if $(var.FLAVOUR)=1?>
    <SetDirectory Id="COMPANYFOLDER" Value="FirstCompany" Sequence="execute"/>
    <SetDirectory Id="APPLICATIONFOLDER" Value="FirstProduct" Sequence="execute"/>
<?else?>
    <SetDirectory Id="COMPANYFOLDER" Value="SecondCompany" Sequence="execute"/>
    <SetDirectory Id="APPLICATIONFOLDER" Value="SecondProduct" Sequence="execute"/>
<?endif?

這是在與設置目錄結構相同的片段中完成的,但是沒有用。

還嘗試了:

    <CustomAction Id="SetCompanyDirToFirst"
                  Directory="COMPANYFOLDER"
                  Value="FirstCompany" />

    <InstallExecuteSequence>
       <Custom Action="SetCompanyDirToFirst" Before="InstallFiles">$(var.FLAVOUR)=1</Custom>
       ....
    </InstallExecuteSequence>

盡管當我運行安裝程序時這些方法都可以正常編譯(btw Wix 3.6),但是它會抱怨諸如“無法訪問網絡位置XXXXXXXX”的錯誤,其中XXXXXX是APPLICATIONFOLDER中的值。

我現在已經達到(不需要很多)我的Wix技能極限,所以希望有人在這里可以闡明一些想法?

干杯,

克里斯。

使用<CustomAction><SetDirectory>將目錄設置為新路徑時,必須將目錄設置為完整路徑 ,而不僅僅是單個片段。

例如:

<?if $(var.FLAVOUR) = 1 ?>
  <SetDirectory Id="APPLICATIONFOLDER" Value="[ProgramFilesFolder]FirstCompany\FirstProduct" Sequence="execute" />
<?else?>
  <SetDirectory Id="APPLICATIONFOLDER" Value="[ProgramFilesFolder]SecondCompany\SecondProduct" Sequence="execute" />
<?endif?>

由於您要在APPLICATIONFOLDER目錄中設置完整路徑,因此無需更改COMPANYFOLDER目錄。

但是,如果您以這種方式使用預處理器,則實際上根本不需要使用自定義操作,則可以在構建時進行所有操作:

<?if $(var.FLAVOUR) = 1 ?>
  <?define CompanyFolderName = "FirstCompany" ?>
  <?define ProductFolderName = "FirstProduct" ?>
<?else?>
  <?define CompanyFolderName = "SecondCompany" ?>
  <?define ProductFolderName = "SecondProduct" ?>
<?endif?>

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="COMPANYFOLDER" Name="$(var.CompanyFolderName)">
         <Directory Id="APPLICATIONFOLDER" Name="$(var.ProductFolderName)">
           ....

暫無
暫無

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

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