2017-08-15 67 views
0

我正在使用Wix Toolset 3.11,並試圖創建一個Wix引導程序,它正在爲我的軟件安裝一個非常大的先決條件 - 一個傳統的InstallShield可執行文件,在〜600文件夾中找到約5000個相關文件。我已經將所有這些文件壓縮到大約3GB的單個自解壓存檔中。嘗試構建時出現以下錯誤:Wix Bootstrapper與大包

light.exe(0,0):錯誤LGHT0001:算術運算導致溢出。

這裏是引導程序我目前相關的XML:

<Chain> 
    <PackageGroupRef Id="MyPrerequisites"/> 
    <PackageGroupRef Id="ReallyBigExe"/> 
    <PackageGroupRef Id="OtherStuff"/> 
</Chain> 
<Fragment> 
    <util:RegistrySearch Id=ReallyBigExeFound" Key="Assume searching stuff is here"/> 
    <PackageGroup Id=ReallyBigExe"> 
     <ExePackage InstallCondition="ReallyBigExeFound" 
        Compressed="no" 
        DisplayName="Install Really Big Thing" 
        Permanent="no" 
        SourceFile="Packages\ReallyBigThing.exe" 
        Name="ReallyBigThing.exe"/> 
    </PackageGroup> 
</Fragment> 

我試過的壓縮,緩存,名稱等,而且所有結果在相同的錯誤不同的變體。我知道這是由於包含的EXE文件很大;請參閱Github Issue here

我也看到,分離的容器應該幫助解決這個問題。我已經嘗試了使用容器與我的PackageGroup的幾種組合,也無濟於事。

所以,問題:我如何在安裝包中包含這個非常大的ex​​e包,讓我可以將它安裝到包鏈中,但不會將其嵌入到引導程序數據文件中?

+0

我無法加速bootstrappers,但是prereq的格式是什麼?它是一個封裝在EXE中的MSI文件嗎?如果是這樣,你如何編譯它?你可以用外部cab文件編譯它嗎?你可以使用2個外部cab文件來讓每個文件都小於2GB?我沒有使用它,但幾個開發人員推薦[dotnetinstaller bootstrapper](http://dblock.github.io/dotnetinstaller/)。只是一個建議,我的頭頂,因爲它看起來像你可能沒有運氣與燒傷。 –

+0

先決條件是已將cab文件和可執行文件壓縮到一個自解壓歸檔文件中的集合。這是一個傳統的InstallShield安裝程序,在〜600個有效載荷文件夾中包含〜5000個有效載荷文件。 我會嘗試dotnetinstaller,但使用Wix也是該項目的要求之一。 –

+0

或者,嘗試替換5000個文件的生成有效內容元素的單個大檔案。 –

回答

1

我的問題解決:

我們不想跟蹤外部「ReallyBigExe」的文件,它應該是一個獨立的產品。而不是5K文件打包到安裝程序的有效載荷,我創建了一個工具,它允許執行任意可執行文件:

static int Main(string[] args) 
{ 
    // Check your arguments here 

    string path = args[0]; 
    string executable = args[1]; 
    path = Path.GetDirectoryName(path); 
    path = Path.Combine(path, executable); 

    try 
    { 
    if(!File.Exists(path)) throw new FileNotFoundException(); 
    Process p = new Process() 
    { 
     StartInfo = new ProcessStartInfo(path) 
    }; 
    p.Start(); 
    p.WaitForExit(); 
    } 
    catch(Exception) 
    { 
    return -1; 
    } 
    return 0; 
} 

我啓動此exe與參數傳遞給外部可執行我想安裝過程的一部分安裝:

<ExePackage SourceFile="$(var.MyUtility.TargetDir)MyUtility.exe" 
      Compressed="yes"> 
    <CommandLine InstallArgument="[WixBundleOriginalSource] Data\setup.exe"/> 
</ExePackage> 

我的外部安裝MUST位於\ DATA \相對於實際的引導程序exe文件,但參數可以被修改爲指向任何路徑。在大多數情況下,這也可以通過自定義操作完成;在我的情況下,外部exe文件正在安裝SQL Server,當通過自定義操作啓動安裝時,它將掛起。

相關問題