@Nagy Vilmos,您的解决方案不适用于 64 位操作系统。刻录是32 位 程序。它将启动 32 位“dism.exe”,即使您希望它通过在 64 位操作系统上提供完整路径“C:\Windows\System32\dism.exe”来运行 64 位 dism。这是由“File System Redirector”引起的。
dism 的日志会告诉您它是 32 位还是 64 位。打开文件“C:\Windows\Logs\DISM\dism.log”你会发现这样的信息:
主机信息:操作系统版本=6.1.7600,运行架构=x86
或者,
主机信息:操作系统版本=6.1.7600,运行架构=amd64
当您尝试在 64 位操作系统上运行 32 位磁盘时,您会收到此错误
错误:11
您无法使用 32 位版本的 DI 为正在运行的 64 位操作系统提供服务
SM。
请使用与您的计算机体系结构相对应的 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 ----->