我的公司正在开发一个依赖PostgreSQL的应用程序,我们正在使用WIX开发安装程序。我们如何在安装应用程序时自动运行PostgreSQL安装程序(也是一个msi文件)?我们需要在Wix中设置什么?如果您碰巧知道任何网页解释了这一点,请发布链接。谢谢!
答案 0 :(得分:4)
这是我写的一个引导程序,用于将MSXML 6添加到我们的一个安装程序中。以下网站对于帮助我了解需要完成的工作至关重要,并且可以填写您可能拥有的任何空白: http://msdn.microsoft.com/en-us/library/aa730839%28VS.80%29.aspx
特别是关于让安装程序以静默方式运行的问题,您需要将正确的开关添加到Command元素的@Arguments属性中,这可能类似于:
<Command PackageFile="PostgreSQL.msi" Arugments="/quiet"/>
您还需要找到您正在使用的MSI的ProductCode(使用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="@PROJECT-EXE@"
ApplicationName="@PROJECT@"
BootstrapperItems="@(BootstrapperFile)"
Path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper"
ComponentsLocation="Relative"
OutputPath="."
Culture="de"/>
</Target>
</Project>
我希望这会有所帮助。
答案 1 :(得分: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 format。 bootstrapper generator工具也可能会有所帮助。
你可能认为这一切都很复杂。有关生成引导程序的更简单的替代方法,请查看dotNetInstaller,它实际上是一个通用的引导程序生成器。它看起来很光滑,但我还没有任何亲身体验。
答案 2 :(得分:0)
您不能同时运行两个MSI安装,您需要一个单独的引导程序来依次安装每个MSI。