我正在使用WiX Toolset v3.10.0.1726
我有一个捆绑在引导程序中的.msi文件。
MSI Defintion:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="$(var.ProductName)"
Language="!(loc.ProductLanguage)"
Version="!(bind.fileVersion.FILE)"
Manufacturer="$(var.Manufacturer)"
UpgradeCode="$(var.UpgradeCode)">
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine"
Platform="x86"
InstallPrivileges="elevated"
ReadOnly="yes" />
<MediaTemplate EmbedCab="yes" />
<?include Feature.wxi?>
<MajorUpgrade AllowDowngrades="no"
AllowSameVersionUpgrades="yes"
DowngradeErrorMessage="!(loc.DowngradeErrorMessage)" />
<UI Id="UserInterface">
<Property Id="WIXUI_INSTALLDIR"
Value="TARGETDIR" />
<Property Id="WixUI_Mode"
Value="Custom" />
<TextStyle Id="WixUI_Font_Normal"
FaceName="Tahoma"
Size="8" />
<TextStyle Id="WixUI_Font_Bigger"
FaceName="Tahoma"
Size="9"
Bold="yes" />
<TextStyle Id="WixUI_Font_Title"
FaceName="Tahoma"
Size="9"
Bold="yes" />
<Property Id="DefaultUIFont"
Value="WixUI_Font_Normal" />
<DialogRef Id="ProgressDlg" />
<DialogRef Id="ErrorDlg" />
<DialogRef Id="FilesInUse" />
<DialogRef Id="FatalError" />
<DialogRef Id="UserExit" />
<Publish Dialog="ProgressDlg"
Control="Next"
Event="EndDialog"
Value="Return"
Order="2" />
</UI>
</Product>
</Wix>
如果直接执行.msi文件,则在应用程序运行时,FilesInUse
对话框会正确显示。一切都很好。
现在我已将.msi文件集成到引导程序中:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="!(bind.packageName.Setup)"
Version="!(bind.packageVersion.Setup)"
Manufacturer="!(bind.packageManufacturer.Setup)"
UpgradeCode="$(var.UpgradeCode)"
DisableModify="yes">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication LicenseUrl=""
SuppressOptionsUI="no"
ShowVersion="yes"
SuppressRepair="yes"
LogoFile="Resources/dpd.png" />
</BootstrapperApplicationRef>
<Chain DisableSystemRestore="yes">
<MsiPackage Id="Setup"
Compressed="yes"
Name="$(var.ProductName)"
SourceFile="setup.msi"
DisplayInternalUI="yes"
Vital="yes" />
</Chain>
</Bundle>
</Wix>
我需要DisplayInternalUI
因为我在.msi文件中有一些额外的对话框,这些对话框是设置所必需的。
如果应用程序未在升级方案中运行,则一切正常,而升级时正在运行的应用程序会使引导程序和.msi文件进入无响应状态。
日志的输出:
[2A34:28F0] [2015-07-21T16:38:40] i001:Burn v3.10.0.1726,Windows v6.1 (Build 7601:Service Pack 1),路径:W:\ work \ SETUP.exe
...
[2A34:28F0] [2015-07-21T16:38:40] i009:命令行:' - burn.unelevated BurnPipe {571E9E94-4908-45EE-A6AC-05F923FAFDCF} {F7B2FBA0-BAEB-42C7-B1D5-B8704F153049} 10904 / log log.txt'
... [2A34:28F0] [2015-07-21T16:38:41] i300:申请开始
... [2A98:054C] [2015-07-21T16:38:42] i301:应用执行 包:安装程序,操作:安装,路径:C:\ ProgramData \ Package 缓存{99D06386-9447-4D7B-8307-E53C12BB09B5} v2.0.19.28124 \ FOOAPPLICATION, 参数:'ARPSYSTEMCOMPONENT =“1”MSIFASTINSTALL =“7” INSTALLFOLDER =“C:\ FOOFOLDER”TRANSFORMS =“:1031”'
msi-log的输出(至少是最后的相关行):
...
MSI(s)(24:D4)[16:38:42:826]:采取行动:InstallValidate
MSI(s)(24:D4)[16:38:42:827]:财产变更:删除 MsiRestartManagerSessionKey属性。它的当前价值是 '053651647df31e46971d3237c9eb6a06'。
MSI(s)(24:D4) [16:38:42:827]:转换表格对话。
... ...
MSI(s) (24:D4)[16:38:42:828]:注意:1:2205 2:3:BindImage
MSI(s) (24:D4)[16:38:42:828]:注意:1:2205 2:3:ProgId
MSI(s) (24:D4)[16:38:42:828]:注意:1:2205 2:3:PublishComponent
MSI(s)(24:D4)[16:38:42:828]:注意:1:2205 2:3:SelfReg
MSI (s)(24:D4)[16:38:42:828]:注意:1:2205 2:3:分机
MSI (s)(24:D4)[16:38:42:828]:注意:1:2205 2:3:字体
MSI(s) (24:D4)[16:38:42:828]:注:1:2205 2:3:班级MSI(s) (24:D4)[16:38:42:828]:注意:1:2205 2:3:TypeLib
MSI(s) (24:D4)[16:38:42:829]:注意:1:2205 2:3:_RemoveFilePath
MSI (s)(24:D4)[16:38:42:993]:注意:1:1402 2:HKEY_CLASSES_ROOT.NET 3: 2
MSI(24:D4)[16:38:43:127]:注:1:1402 2: HKEY_CLASSES_ROOT.NET 3:2
MSI(24:D4)[16:38:43:221]: PROPERTY CHANGE:修改CostingComplete属性。它的当前价值 是'0'。其新值:'1'。
MSI(s)(24:D4)[16:38:43:222]: 注意:1:2205 2:3:BindImage
MSI(s)(24:D4)[16:38:43:222]: 注意:1:2205 2:3:ProgId
MSI(24:D4)[16:38:43:222]: 注意:1:2205 2:3:PublishComponent
MSI(24:D4) [16:38:43:222]:注:1:2205 2:3:SelfReg
MSI(24)(D4) [16:38:43:222]:注:1:2205 2:3:延期
MSI(24:D4) [16:38:43:222]:注意:1:2205 2:3:字体
MSI(s)(24:D4) [16:38:43:222]:注:1:2205 2:3:班级以MSI(24:D4) [16:38:43:222]:注意:1:2205 2:3:TypeLib
MSI(s)(24:D4) [16:38:43:222]:注:1:2727 2:
MSI(24:D4)[16:38:43:314]: 转换表错误。
MSI(s)(24:D4)[16:38:43:314]: 转换表错误。
转换MSI(c)(98:4C)[16:38:43:326]: RESTART MANAGER:会话已打开。
那么,为什么引导程序中的msi会挂起(并导致引导程序挂起),我该如何解决这个问题?
答案 0 :(得分:0)
由于您的链上的DisableSystemRestore值,您跳过了系统还原点的创建,但是您没有在msi中执行类似的操作。您可以通过设置MSIFASTINSTALL属性跳过在msi中创建还原点。适用于MSI 5.0,如下所述:http://msdn.microsoft.com/en-us/library/dd408005(VS.85).aspx
<!-- Add me to your MSI definition -->
<Property Id="MSIFASTINSTALL" Value="1" />