我想构建一个(而且只有一个)install.exe可以安装 32 位 - 64 位操作系统、检测 .NET 并预安装它。
我尝试使用burn,但失败了,即使是最简单的引导程序也无法工作!
\n\n我用的是bootstrapper,在VS2010中自动生成,并且只改了一处代码:
\n\n<MsiPackage SourceFile="D:\\WiX\\SetupProject\\TestBurn\\TestBurn\\PlanManagerPackage.msi" />\nRun Code Online (Sandbox Code Playgroud)\n\n我的 PlanManagerPackage.msi 确实有效。我的操作系统是 \xe2\x80\x9cWindows v6.1 (Build 7600: Service Pack 0)\xe2\x80\x9d,并且我以管理员权限运行 install.exe。
\n\n这是错误日志:
\n\ne000: Error 0x80070005: Failed to write run key value.\ne000: Error 0x80070005: Failed to update resume mode.\ne000: Error 0x80070005: Failed to begin registration session.\ne000: Error 0x80070005: Failed to begin registration session in per-machine process.\ne000: Error 0x80070005: Failed to register bundle.\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个错误吗?如果是的话,有什么方法可以帮助我吗?如果没有,我该如何解决?
\n关于这个问题有很多问题,但都没有解释这两行到底应该放在哪里:
<Property Id="ARPNOREPAIR" Value="yes" Secure="yes" />
<Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
Run Code Online (Sandbox Code Playgroud)
尝试在线搜索文档本身,但没有运气
编辑
我尝试将它们放入我的标签中,但它仍然存在:
我在看这里提出的解决方案:
但我不知道这对于"修改"刻录屏幕(当有人决定删除某个.msi时)是如何工作的.
在卸载/修改页面显示时查看Burn .log(我调用了我的变量来描述是否选中了复选框,'Checkbox1'到'Checkbox6'):
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox1' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox2' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox3' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox4' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox5' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox6' to value '1'
Run Code Online (Sandbox Code Playgroud)
(等等.)
[171C:1034][2013-04-23T11:49:24]i100: Detect begin, 3 packages
[171C:1034][2013-04-23T11:49:24]i000: Setting string variable 'NETFRAMEWORK40' to value '1'
[171C:1034][2013-04-23T11:49:24]i052: Condition 'NETFRAMEWORK40' evaluates to true.
[171C:1034][2013-04-23T11:49:24]i101: Detected package: NetFx40Redist, …Run Code Online (Sandbox Code Playgroud) 我编写了一个自定义托管引导程序应用程序(MBA)并获得了大部分功能,除了修复.检查捆绑日志提供:
[335C:3440][2013-04-29T13:51:41]w343: Prompt for source of package:
NetFx45Web, payload: NetFx45Web, path:
D:\dev\Setup\redist\dotNetFx45_Full_setup.exe
[335C:3440][2013-04-29T13:51:41]e054: Failed to resolve source for file:
D:\dev\Setup\redist\dotNetFx45_Full_setup.exe, error: 0x80070002.
[335C:3440][2013-04-29T13:51:41]e000: Error 0x80070002: Failed while
prompting for source (original path
'D:\dev\Setup\redist\dotNetFx45_Full_setup.exe').
[335C:3440][2013-04-29T13:51:41]e313: Failed to acquire payload: NetFx45Web
to working path:
C:\Users\admin\AppData\Local\Temp\{ab28ebc1-ce07-49bf-bb1f-bb83a4944aeb}\NetFx45Web,
error: 0x80070002.
[335C:164C][2013-04-29T13:51:41]e000: Error 0x80070002: Failed while
caching, aborting execution.
[335C:164C][2013-04-29T13:51:41]i399: Apply complete, result: 0x80070002,
restart: None, ba requested restart: No
[335C:164C][2013-04-29T13:51:43]i500: Shutting down, exit code: 0x80070002
[335C:164C][2013-04-29T13:51:43]i410: Variable: ArpSystemComponentCustom = 1
[335C:164C][2013-04-29T13:51:43]i410: Variable: NETFRAMEWORK45 …Run Code Online (Sandbox Code Playgroud) 我有两个我的产品SKU.两者都使用Burn作为引导程序.我以这样的方式创作了MSI,Pro版本将升级并替换Lite版本.但是一旦我将它们包装在刻录中,Pro版本就可以正确升级MSI,但Lite安装条目仍然在ARP列表中.它们都是相同的版本号,我已设置:
<RelatedBundle Id="LITE_UPGRADE_CODE" Action="Upgrade"/>
Run Code Online (Sandbox Code Playgroud)
在Pro捆绑中.
有没有办法删除Lite条目?
如何让Burn检测到安装了所需的.NET 4.5框架,如果在启动我的自定义UI之前没有通知用户安装需要运行.NET 4.5?
如果没有先决条件检查,我的自定义UI(BootStrapperApplication)将无法加载.
我不想只安装它丢失的提示.
我有5个安装程序,可能需要安装在同一台机器上,其他地方.每个用户都有自己的用户输入自定义UI,为已安装的应用程序设置配置选项.
我需要用户能够从完整安装程序中选择要运行的安装程序.类似于您在标准安装程序中选择功能的方式.但是,如果用户更喜欢只抓取所需的msi,我仍然需要将它们作为单独的安装程序.
有没有办法像引导其他wix项目类型一样向引导程序安装程序添加自定义ui步骤?
在玩Bryan的TestBA Bootstrapper时,我首先安装了1.0.0.0.然后我将版本增加到1.0.0.1并记录该过程.以下是升级期间传递-uninstall -quite命令行的部分:
[2870:21C0][2014-02-24T17:46:38]i300: Apply begin
[1A44:1E54][2014-02-24T17:46:41]i360: Creating a system restore point.
[1A44:1E54][2014-02-24T17:47:15]i361: Created a system restore point.
[1A44:1E54][2014-02-24T17:47:15]i000: Caching bundle from: 'C:\Users\fwaheed\AppData\Local\Temp\{57a07296-0310-4628-971c-2da38aa09f25}\.be\BootstrapperSetup.exe' to: 'C:\ProgramData\Package Cache\{57a07296-0310-4628-971c-2da38aa09f25}\BootstrapperSetup.exe'
[1A44:1E54][2014-02-24T17:47:15]i320: Registering bundle dependency provider: {57a07296-0310-4628-971c-2da38aa09f25}, version: 1.0.0.1
[1A44:2B40][2014-02-24T17:47:16]i305: Verified acquired payload: DummyInstallationPackageId at path: C:\ProgramData\Package Cache\.unverified\DummyInstallationPackageId, moving to: C:\ProgramData\Package Cache\{F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}v1.0.0.1\DummyInstaller.msi.
[1A44:1E54][2014-02-24T17:47:16]i323: Registering package dependency provider: {F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}, version: 1.0.0.1, package: DummyInstallationPackageId
[1A44:1E54][2014-02-24T17:47:16]i301: Applying execute package: DummyInstallationPackageId, action: Install, path: C:\ProgramData\Package Cache\{F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}v1.0.0.1\DummyInstaller.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7"'
[2870:21C0][2014-02-24T17:47:22]i319: Applied execute package: DummyInstallationPackageId, result: 0x0, …Run Code Online (Sandbox Code Playgroud) 我是WiX的新手,我正在尝试让我的Bootstrapper在完成时启动我安装的应用程序.要做到这一点,我正在使用
<Variable Name="LaunchTarget" Value="path_to_exe"/>
Run Code Online (Sandbox Code Playgroud)
但是,我不容易获得可执行文件的路径.这是因为我使用<Chain>来安装一些先决条件,然后是一个实际安装我的exe的msi.
所以要做到这一点,msi正在写入注册表中已知位置的路径,然后引导程序读取并使用它.
问题是当引导程序读取注册表时,msi尚未运行,因此无法在最后运行可执行文件.
这是我的WiX,如果它有帮助:
<?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 Installation" UpgradeCode="a8964402-f3fc-4878-aafd-31ecda6b685e" Version="1.0.0.0">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
ThemeFile="theme.xml"
SuppressOptionsUI="yes" />
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="NetFx40Redist"/>
<ExePackage Id="OpenSSL" SourceFile="pre-requesite.exe" />
<MsiPackage Id="myInstall" SourceFile="mySetup.msi" />
</Chain>
<util:RegistrySearch Root="HKLM"
Key="Software\myProgram"
Value="myEXEPath"
Variable="myEXEPath"
Result="value"
Format="raw" />
<Variable Name="LaunchTarget" Value="[myEXEPath]"/>
</Bundle>
</Wix>
Run Code Online (Sandbox Code Playgroud)
所以,简而言之,我想在MsiPackage安装之后运行RegistrySearch .可以这样做吗?如果没有,我有什么替代品?
我注意到,如果我在安装之前手动填写注册表值,一切正常.这意味着除了订单运行之外,一切都运行良好.
在wix burn bootstrapper bundle中:如何检测ms vcredist 2013 x86是否存在?
我正在检查特定包的Upgrade Id/ UpgradeCode,但是包总是重新安装它,即使它已经安装了.
...
<Bundle>
...
<Chain>
<!-- redist packages -->
<PackageGroupRef Id="redist"/>
...
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="redist">
<PackageGroupRef Id="redist_vc120" />
...
</PackageGroup>
</Fragment>
<Fragment>
<!-- vcredist 2013 x86 -->
<?define vcredist2013minversion="12.0.21005"?>
<Upgrade Id="B59F5BF1-67C8-3802-8E59-2CE551A39FC5">
<UpgradeVersion Minimum="$(var.vcredist2013minversion)" Property="VCREDIST2013INSTALLED" OnlyDetect="yes" IncludeMinimum="yes" />
</Upgrade>
<PackageGroup Id="redist_vc120">
<ExePackage Id="vc120" Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
Name="redist\VC120_Runtime\vcredist_x86.exe"
InstallCommand="/quiet /norestart"
InstallCondition="Not VCREDIST2013INSTALLED"
/>
</PackageGroup>
</Fragment>
...
Run Code Online (Sandbox Code Playgroud)
这有什么不对InstallCondition吗?
还是我需要添加一个DetectCondition? …