我正在为应用程序创建一个.msi包,它具有安装的先决条件。 我正在使用Visual Studio 2005 Bootstrapper执行此任务。 为此,我做了以下事情: 位于文件夹C:\ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \并为我的先决条件创建了一个文件夹(使其与'dotnetfx'结构相同);创建了'product.xml'和'package.xml'并将它们放置得恰当。到目前为止,我保持xml文件非常简单,以测试安装:
product.xml
<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="MyPrereq.exe" />
</PackageFiles>
<InstallChecks>
</InstallChecks>
<Commands Reboot="None">
<Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
<InstallConditions>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
</ExitCodes>
</Command>
</Commands>
</Product>
package.xml中
<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<Strings>
<String Name="Culture">en</String>
<String Name="DisplayName">MyPrereq</String>
<String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
</Strings>
</Package>
现在我可以从列表中添加先决条件并构建我的安装项目。
问题:
构建输出是'setup.exe','MyApp.msi'包,以及名为'MyPrereq'的子文件夹,其中包含'MyPrereq.exe'。
我希望构建创建一个'setup.exe'和一个'MyApp.msi',其中包含'MyPrereq',没有其他文件/目录。
我知道.NET框架是我的应用程序的另一个先决条件,并且它包含在相同的.msi中,所以这应该是可能的。
我怎样才能做到这一点?
答案 0 :(得分:4)
您可以使用IExpress(随Windows提供)等工具创建自解压安装程序,其中包含单个可执行文件中的所有文件(请参阅this SO posting)。
您不能让MSI文件安装自己的先决条件。首先,因为Windows Installer本身是先决条件(并且必须由非MSI exe安装),其次是因为Windows Installer安装是事务性的,并且不支持链接执行MSI文件。这基本上意味着一个MSI安装无法启动另一个MSI安装。因此,任何先决条件必须由单独的引导程序安装(顺便说一下,安装不再是事务性的 - 如果MSI安装失败,则不会卸载先决条件。)
尽管似乎对引导程序机制存在基本的误解。目前只能由Visual Studio或MSBuild生成引导程序。使用WiX是不可能的。在MSBuild中查找GenerateBootstrapper任务(请参阅this SO posting)。
答案 1 :(得分:3)
我设法用IExpress做到了。
但是,不得不使用一个小技巧,这里描述 Creating a bootstrapper for a VS Shell application
不幸的是,MSBuild任务 没有提供选项 配置资源使用 在的先决条件安装程序 目标目录,因此您必须手动 更新适当的资源文件 删除硬编码的路径 寻找一个先决条件 同名的子目录。
在Visual中打开Setup.exe程序 Studio的资源编辑器
双击 名为SETUPCFG的资源在41 文件夹
搜索“Vs Shell” 字符串并删除两次出现 出现了 保存资源文件 并且Setup.exe可执行文件将是 自动更新
运行iexpress 按照以下步骤创建新包 IExpress向导的步骤并确保 包括以下文件: MyVSShellApplication.msi文件 Setup.exe bootstrapper文件 vs_shell_isolated.enu.exe文件
问题在于引导程序将先决条件放入子文件夹中,而IExpress无法识别子文件夹。在编辑'setup.exe'时也要小心,第一次尝试时没弄错。