2009-12-28 142 views
3

我的公司正在开发一个依赖于PostgreSQL的应用程序,我们正在使用WIX开发安装程序。我们如何使PostgreSQL安装程序(也是一个msi文件)在安装我们的应用程序时自动运行?我们需要在Wix中设置什么?如果您碰巧知道任何网页解释这一点,请张贴链接。谢谢!如何在WIX中安装时运行其他程序(PostgreSQL)的安装程序?

回答

3

一个Windows Installer会话无法启动另一个会话,因此一个msi无法安装其他msi。因此,您需要制作第三个应用程序,一个引导程序,它将安装两个MSI文件。

要创建这样的引导程序,您可以使用msbuild的generatebootstrapper task。 wix文档已经介绍了如何使用此任务来生成安装.NET框架的引导程序。请参阅How To: Install the .NET Framework Using a Bootstrapper。这为.NET框架使用了预定义的引导程序包。

但是,在这种情况下,您还必须为PostgreSQL msi编写您自己的引导程序包。一种方法是研究C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\(或Windows SDK中的那些)中的现有引导程序包并阅读documentation of the Bootstrapper Manifest XML formatbootstrapper generator工具也可能有所帮助。

你可能会认为这一切都很复杂。对于更简单的生成引导程序的替代方法,请参阅dotNetInstaller,它实际上是一个通用引导程序生成器。它看起来很光滑,但我还没有任何实际操作经验。

+0

非常感谢wcoenen – Ray 2009-12-29 17:39:18

0

您不能一次运行两个MSI安装,您需要一个单独的引导程序来依次安装每个MSI。

4

这是我写的一个引导程序,用于将MSXML 6添加到我们的安装程序中。下面的网站是在帮助我了解什么需要做的关键,或许能填补你可能有任何空白: http://msdn.microsoft.com/en-us/library/aa730839%28VS.80%29.aspx

专为您的有关获取安装程序静默运行的问题,则需要到适当的开关添加到Command元素的属性@Arguments,这可能会是这个样子:

<Command PackageFile="PostgreSQL.msi" Arugments="/quiet"/> 

您还需要找到你正在使用的MSI的产品代码(使用MS ORCA)进行确保如果PostgreSQL已安装,引导程序不会尝试运行安装:

<InstallChecks> 
    <MsiProductCheck 
     Property="IsPostgresInstalled" 
     Product="{PRODUCT-CODE-OF-POSTGRESQL-MSI}"/> 
</InstallChecks> 

product.xml:

<Product 
    xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" 
    ProductCode="Microsoft.MSXML.6.SP2"> 

    <PackageFiles> 
    <PackageFile Name="msxml6-KB954459-enu-x86.exe"/> 
    </PackageFiles> 

    <InstallChecks> 
    <MsiProductCheck 
     Property="IsMsiInstalled" 
     Product="{1A528690-6A2D-4BC5-B143-8C4AE8D19D96}"/> 
    </InstallChecks> 

    <Commands> 
    <Command PackageFile="msxml6-KB954459-enu-x86.exe" Arguments=""> 
     <InstallConditions> 
     <BypassIf 
      Property="IsMsiInstalled" 
      Compare="ValueGreaterThan" Value="0"/> 
     <FailIf Property="AdminUser" 
       Compare="ValueNotEqualTo" Value="True" 
       String="NotAnAdmin"/> 
     </InstallConditions> 

     <ExitCodes> 
     <ExitCode Value="0" Result="Success"/> 
     <ExitCode Value="1641" Result="SuccessReboot"/> 
     <ExitCode Value="3010" Result="SuccessReboot"/> 
     <DefaultExitCode Result="Fail" String="GeneralFailure"/> 
     </ExitCodes> 
    </Command> 
    </Commands> 
</Product> 

这里是我与运行的MSBuild项目:

<Project ToolsVersion="3.5" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
    <BootstrapperFile Include="Microsoft.MSXML.6.SP2" > 
     <ProductName>Microsoft MSXML 6 SP2</ProductName> 
    </BootstrapperFile> 
    </ItemGroup> 

    <Target Name="setup"> 
    <GenerateBootstrapper 
     ApplicationFile="@[email protected]" 
     ApplicationName="@[email protected]" 
     BootstrapperItems="@(BootstrapperFile)" 
     Path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper" 
     ComponentsLocation="Relative" 
     OutputPath="." 
     Culture="de"/> 
    </Target> 

</Project> 

我希望这有助于。

+0

你好Zachary, 我真的很感谢你的帮助! – Ray 2010-01-09 02:16:05

相关问题