找出为什么 Wix Bootstrapper 构建了一个 "Invalid" 的 MSI
Find out why Wix Bootstrapper has build an MSI that is "Invalid"
我是 Wix 的新手,我的问题不是如何解决这个特定问题,而是如何解决它的根源? "debug" 你会采取什么步骤?
考虑到这一点,这是我目前的问题:
每当我尝试打开引导程序构建的 MSI 时,我都会得到:
我该如何解决导致此问题的根源?
构建的输出是:
Build started 31/05/2016 14:00:50.
Project "C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" on node 1 (Bundle target(s)).
Bundle:
TEST: ClientInstaller.wxs;WebSiteContent.wxs;IISConfiguration.wxs
"C:\Program Files (x86)\WiX Toolset v3.10\bin\candle" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension "..\MyProjBootStrapper\Bundle.wxs" -dpub
lishDir=..\Setup\publish\
Windows Installer XML Toolset Compiler version 3.10.3.2924
Copyright (c) .NET Foundation and contributors. All rights reserved.
Bundle.wxs
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/q' when the ExePacka ge/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/q' when the ExePa ckage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/norestart' when the
ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/norestart' when t he ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/chainingpackage' whe n the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/chainingpackage'
when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
"C:\Program Files (x86)\WiX Toolset v3.10\bin\light" "Bundle.wixobj" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension -out bin\Release\Setup.
msi
Windows Installer XML Toolset Linker version 3.10.3.2924
Copyright (c) .NET Foundation and contributors. All rights reserved.
C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\Bundle.wixobj : warning LGHT1109: Found mismatched entry point <Bundle>. Expected <Product> for specified output pack age type .msi. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
Install package has been created.
Done Building Project "C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" (Bundle target(s)).
Build succeeded.
"C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" (Bundle target) (1) ->
(Bundle target) ->
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/q' when the ExePac kage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/q' when the Exe Package/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/norestart' when th e ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/norestart' when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/chainingpackage' w hen the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/chainingpackage ' when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\Bundle.wixobj : warning LGHT1109: Found mismatched entry point <Bundle>. Expected <Product> for specified output pa ckage type .msi. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
7 Warning(s)
0 Error(s)
Time Elapsed 00:00:02.32
如此警告,但似乎没有任何迹象表明安装程序有问题??特别是因为我现在已经删除了 .net 的东西:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="MyBootStrapper" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="71d3e0df-abd8-450e-a8e0-ade54891fc4f">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<!--<PackageGroupRef Id="Netfx4Full"/>-->
<MsiPackage Id="ClientInstaller" SourceFile="..\MyClientInstaller\bin\Release\ClientSetup.msi" />
</Chain>
</Bundle>
<Fragment>
<!-- Check for .NET 4.0-->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Netfx4FullVersion"
/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Netfx4x64FullVersion"
/>
<PackageGroup Id ="Netfx4Full">
<ExePackage Id="Netfx4Full"
DisplayName="Microsoft .Net Framework"
Cache="yes"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Protocol="netfx4"
Vital="yes"
SourceFile="redist\dotNetFx40_Full_x86_x64.exe"
InstallCommand="/passive /norestart /q /chainingpackage"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)"
/>
</PackageGroup>
</Fragment>
</Wix>
我正在使用以下命令在 MSBuild 中构建:
<Target Name="Bundle">
<!-- At last create install bundle-->
<Message Text="TEST: @(WixCode)"/>
<Exec
Command='"$(WixPath)candle" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension "$(BootStrapperPath)Bundle.wxs" -dpublishDir=$(Publish)'
ContinueOnError="false"
WorkingDirectory="." />
<Exec
Command='"$(WixPath)light" "Bundle.wixobj" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension -out $(BundleOut)'
ContinueOnError="false"
WorkingDirectory="." />
<!-- A message at the end -->
<Message Text="Install package has been created." />
</Target>
我一直在想 "burn" 需要在某个地方,但到目前为止我找到的教程似乎建议不要...
我也尝试在 Visual studio 中构建它,我得到了相同的结果(它是一个引导程序模板)
----更新----
如果我将其构建为 .exe 就可以了!
此警告会准确告诉您问题所在
warning LGHT1109: Found mismatched entry point <Bundle>.
Expected <Product> for specified output package type .msi.
捆绑包是 exe 安装程序,不是 MSI。
我是 Wix 的新手,我的问题不是如何解决这个特定问题,而是如何解决它的根源? "debug" 你会采取什么步骤?
考虑到这一点,这是我目前的问题:
每当我尝试打开引导程序构建的 MSI 时,我都会得到:
我该如何解决导致此问题的根源?
构建的输出是:
Build started 31/05/2016 14:00:50.
Project "C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" on node 1 (Bundle target(s)).
Bundle:
TEST: ClientInstaller.wxs;WebSiteContent.wxs;IISConfiguration.wxs
"C:\Program Files (x86)\WiX Toolset v3.10\bin\candle" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension "..\MyProjBootStrapper\Bundle.wxs" -dpub
lishDir=..\Setup\publish\
Windows Installer XML Toolset Compiler version 3.10.3.2924
Copyright (c) .NET Foundation and contributors. All rights reserved.
Bundle.wxs
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/q' when the ExePacka ge/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/q' when the ExePa ckage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/norestart' when the
ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/norestart' when t he ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/chainingpackage' whe n the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/chainingpackage'
when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
"C:\Program Files (x86)\WiX Toolset v3.10\bin\light" "Bundle.wixobj" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension -out bin\Release\Setup.
msi
Windows Installer XML Toolset Linker version 3.10.3.2924
Copyright (c) .NET Foundation and contributors. All rights reserved.
C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\Bundle.wixobj : warning LGHT1109: Found mismatched entry point <Bundle>. Expected <Product> for specified output pack age type .msi. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
Install package has been created.
Done Building Project "C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" (Bundle target(s)).
Build succeeded.
"C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build" (Bundle target) (1) ->
(Bundle target) ->
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/q' when the ExePac kage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/q' when the Exe Package/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/norestart' when th e ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/norestart' when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@RepairCommand attribute value '' should contain '/chainingpackage' w hen the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjBootStrapper\Bundle.wxs(31): warning CNDL1136: The ExePackage/@UninstallCommand attribute value '' should contain '/chainingpackage ' when the ExePackage/@Protocol attribute is set to 'netfx4'. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\Bundle.wixobj : warning LGHT1109: Found mismatched entry point <Bundle>. Expected <Product> for specified output pa ckage type .msi. [C:\MyProj\MyProj\src\MyProj.Net\MyProjClientInstaller\setup.build]
7 Warning(s)
0 Error(s)
Time Elapsed 00:00:02.32
如此警告,但似乎没有任何迹象表明安装程序有问题??特别是因为我现在已经删除了 .net 的东西:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="MyBootStrapper" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="71d3e0df-abd8-450e-a8e0-ade54891fc4f">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<!--<PackageGroupRef Id="Netfx4Full"/>-->
<MsiPackage Id="ClientInstaller" SourceFile="..\MyClientInstaller\bin\Release\ClientSetup.msi" />
</Chain>
</Bundle>
<Fragment>
<!-- Check for .NET 4.0-->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Netfx4FullVersion"
/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Netfx4x64FullVersion"
/>
<PackageGroup Id ="Netfx4Full">
<ExePackage Id="Netfx4Full"
DisplayName="Microsoft .Net Framework"
Cache="yes"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Protocol="netfx4"
Vital="yes"
SourceFile="redist\dotNetFx40_Full_x86_x64.exe"
InstallCommand="/passive /norestart /q /chainingpackage"
DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)"
/>
</PackageGroup>
</Fragment>
</Wix>
我正在使用以下命令在 MSBuild 中构建:
<Target Name="Bundle">
<!-- At last create install bundle-->
<Message Text="TEST: @(WixCode)"/>
<Exec
Command='"$(WixPath)candle" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension "$(BootStrapperPath)Bundle.wxs" -dpublishDir=$(Publish)'
ContinueOnError="false"
WorkingDirectory="." />
<Exec
Command='"$(WixPath)light" "Bundle.wixobj" -ext WixBalExtension -ext WixNetFxExtension -ext WixUtilExtension -out $(BundleOut)'
ContinueOnError="false"
WorkingDirectory="." />
<!-- A message at the end -->
<Message Text="Install package has been created." />
</Target>
我一直在想 "burn" 需要在某个地方,但到目前为止我找到的教程似乎建议不要...
我也尝试在 Visual studio 中构建它,我得到了相同的结果(它是一个引导程序模板)
----更新----
如果我将其构建为 .exe 就可以了!
此警告会准确告诉您问题所在
warning LGHT1109: Found mismatched entry point <Bundle>.
Expected <Product> for specified output package type .msi.
捆绑包是 exe 安装程序,不是 MSI。