2013-07-04 112 views
3

我想我的包在一個設定的EXE文件相結合,並將其上傳到網上與MSI /的Setup.exe先決條件。如何包括WIX

我創建了一個微軟的引導程序,其中包含的Setup.exe與項目MSI輸出,和必要的前期的.NET Framework 2.0,Windows Installer 3.1,Visual C++ 2005年再發行,並且微軟ReportViewer。我使用Visual Studio 2008創建了一個安裝項目。

現在我試圖創建一個使用WiX 3.6單個壓縮設置。我已將它安裝在Visual   Studio   2008.

我已經使用以下命令連接了setup.exe和MSI文件。

<ExePackage SourceFile ="setup.exe" Compressed ="yes"/> 
<MsiPackage SourceFile ="myproject.msi" Compressed ="yes" /> 

但它無法找到MSI文件。我如何將它包含在上面的先決條件?

或者,我可以從互聯網上下載上述先決條件,同時安裝?我該怎麼做?

回答

4

我已經從Visual Studio刪除默認setup.exe和使用MSI文件和依賴Visual Studio創建一個WiX的3.6引導程序:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 

    <Bundle Name="My Application" 
      Version="1.0" 
      IconSourceFile ="E:\logo.ico" 
      Manufacturer="My company" 
      UpgradeCode="4dcab09d-baba-4837-a913-1206e4c2e743"> 

     <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
      <bal:WixStandardBootstrapperApplication 
       LicenseFile="E:\License.rtf" 
       SuppressOptionsUI ="yes" 
       LogoFile ="logo.ico" /> 
     </BootstrapperApplicationRef> 

     <Chain> 
      <ExePackage 
       SourceFile ="ReportViewer\ReportViewer.exe" 
       Compressed ="yes" 
       Vital ="no" 
       Permanent ="yes"/> 
      <ExePackage 
       SourceFile ="vcredist_x86\vcredist_x86.exe" 
       Compressed ="yes" 
       Vital ="no" 
       Permanent ="yes"/> 
      <MsiPackage 
       SourceFile ="MySetup.msi" 
       Compressed ="yes" 
       DisplayName ="My Application" 
       ForcePerMachine ="yes"/> 
     </Chain> 
    </Bundle> 
</Wix> 

它壓縮成一個具有先決條件的單個EXE文件。

0

您可以包括一些先決條件文件的東西,如:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Product Id="*" Name="MyApplication" Version="$(var.ProductVersion)" Manufacturer="manuf" Language="1033"> 

[...] 

<Directory Id="ANOTHERLOCATION" Name="MyApplicationName"> 
    <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1235-111111111111"> 
     <File Id="ApplicationFile4" Source="C:\Users\user\Desktop\requisite.exe"/> 
     <CreateFolder /> 
    </Component> 
</Directory> 
<SetDirectory Id="ANOTHERLOCATION" Value="[WindowsVolume]MyApp" /> 
     <Feature Id="DefaultFeature" Level="1"> 
     <ComponentRef Id="ApplicationFiles" /> 
</Feature> 
</Product> 
</Wix> 

以上副本內C中的requisite.exe文件:/ MyApp的。 然後,您必須根據某些條件從程序運行requisite.exe文件。 這是最基本和直接的方式,而不使用複雜的Wix巫術。

+0

如果我需要檢查先決條件是否以前安裝?如果沒有,那麼安裝,否則跳過安裝..如何檢查這種情況? – Narayan

+0

我的建議是在程序中插入先決條件檢查和可能的安裝(如果它可以在沒有此先決條件的情況下首先運行)。例如,您可以將這些信息存儲在.ini文件中,然後使用您的程序讀取它,如果沒有找到,請調用System.Diagnostics.Process.Start(「requisite.exe」);啓動它 – dendini

4

SourceFile將接受相對路徑.msi文件。或者,如果使用WiX安裝項目構建.msi文件,則可以在WiX Bootstrapper項目中添加對安裝項目的引用。定義variables你可以使用這樣的:

<MsiPackage SourceFile ="$(var.myproject.TargetPath)" Compressed ="yes" /> 

您的用戶將可能有更好的體驗,如果你刪除Visual Studio Bootstrapper,並把所有的先決條件在WiX的引導程序。這對你來說會多一點工作,因爲你的項目的所有先決條件都沒有預先定義的ExePackageGroupExePackage

檢查什麼應該進入一個ExePackage定義信息的最佳位置是有問題的特定條件的文檔。但是,與Visual Studio Bootstrapper軟件包(例如,在C:\Program Files\Microsoft Visual Studio 9\SDK\v2.0\Bootstrapper\Packages中)以及可能在WiX源代碼中預定義的類似先決條件進行比較也很有幫助。特別是,在WiX源代碼中,如果需要,您可以在安裝時找到從Internet下載.NET 4的ExePackage

0

您可以使用類似NSIS要給你引導程序和MSI。你需要編寫一個簡單的腳本NSIS,像這樣:

!define PRODUCT_NAME "YourProductNameHere" 

Name "${PRODUCT_NAME}" 
OutFile "SetupWrapper.exe" 
Icon "Setup.ico" 
BrandingText " " 
SilentInstall silent 

Section 

    SetOutPath "$TEMP\${PRODUCT_NAME}" 

    ; Add all files that your installer needs here 
    File "setup.exe" 
    File "product.msi" 

    ExecWait "$TEMP\${PRODUCT_NAME}\setup.exe" 
    RMDir /r /REBOOTOK "$TEMP\${PRODUCT_NAME}" 

SectionEnd 

這個保存到一個名爲SetupWrapper.nsi文件,並編輯產品的名稱和路徑下的setup.exe和您的MSI文件。現在你可以建立這個文件來獲得一個包含引導程序和MSI的EXE文件。

當這個EXE運行時,它不會有任何自己的用戶界面 - 它只會將你的引導程序和MSI提取到一個臨時文件夾,然後執行引導程序,然後清理。

您還可以在項目中添加一個構建後步驟來構建此包裝器,該包裝器將自動生成組合包裝器EXE。要做到這一點,你可以像這樣添加一個命令:

path-to-NSIS\nsis-2.46\makensis.exe /V2 your-project-path\SetupWrapper.nsi