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