@Nagy Vilmos,你提供的解决方案无法在64位操作系统上运行。 Burn是一个32位程序,即使您想通过完整路径“C:\Windows\System32\dism.exe”在64位操作系统上运行64位dism,它也会启动32位的“dism.exe”。这是由于“文件系统重定向器”导致的。
dism的日志将告诉您它是32位还是64位。打开文件“C:\Windows\Logs\DISM\dism.log”,您将找到以下信息:
主机机器信息:OS版本=6.1.7600,运行架构=x86
或者,
主机机器信息:OS版本=6.1.7600,运行架构=amd64
当您尝试在64位操作系统上运行32位dism时,您将收到以下错误:
错误:11
您不能使用32位版本的DISM服务于正在运行的64位操作系统。
请使用与计算机架构相对应的DISM版本。
DISM日志文件可以在C:\Windows\Logs\DISM\dism.log中找到
我的解决方案是创建另一个WiX安装程序项目“InstallPrerequisites”,并使用“QtExec64CmdLine”运行64位dism。以下是一个示例:
<!--1.You need to use the x64 version of quiet command line
2.[System64Folder] is also needed. If not, QtExec64CmdLine will find a 32-bit dism.exe to run.
-->
<Property Id="QtExec64CmdLine" Value='"[System64Folder]dism.exe" /Online /Apply-Unattend:[ProductTmpFolder]iis_unattend.xml'/>
<CustomAction Id="SilentLaunch" BinaryKey="WixCA" DllEntry="CAQuietExec64" Execute="immediate" Return="check" />
我使用答案文件来包含所有功能,这样我们就可以一次性启用它们。然后链接安装程序。
<MsiPackage DisplayName="Install Prerequisites" SourceFile="$(var.InstallPrerequisites.TargetPath)" />
更新:
通过使用"C:\windows\SysNative\dism.exe",我现在可以避免为x64平台创建单独的项目。从日志中,您可以看到32位进程现在正在运行64位DISM。
2015-10-26 16:28:07, Info DISM DISM.EXE: <----- Starting Dism.exe session ----->
2015-10-26 16:28:07, Info DISM DISM.EXE:
2015-10-26 16:28:07, Info DISM DISM.EXE: Host machine information: OS Version=6.1.7601, Running architecture=amd64, Number of processors=4
2015-10-26 16:28:07, Info DISM DISM.EXE: Executing command line: C:\windows\SysNative\dism.exe
2015-10-26 16:28:07, Info DISM DISM Provider Store: PID=2000 Getting the collection of providers from a local provider store type. - CDISMProviderStore::GetProviderCollection
....
2015-10-26 16:28:09, Info DISM DISM.EXE: Image session has been closed. Reboot required=no.
2015-10-26 16:28:09, Info DISM DISM.EXE:
2015-10-26 16:28:09, Info DISM DISM.EXE: <----- Ending Dism.exe session ----->