我目前正在编写一个批处理脚本,用于在操作系统上启动进程。此批处理脚本由一个测试应用程序调用,该测试应用程序在 32 位和 64 位操作系统上均以 32 位应用程序的形式构建和运行。批处理脚本编写如下:
set EXE=%1
if exist %WINDIR%\sysnative\%1 ( set EXE=%WINDIR%\sysnative\%1 )
start "" "%EXE%"
我使用 sysnative 变量在 64 位操作系统上启动 64 位应用程序,在 32 位操作系统上启动 32 位应用程序。我在 Vista 及更高版本的操作系统上使用此脚本。它在除 Windows Vista x64 RTM 之外的所有操作系统上都能正常工作。调用时,我收到“应用程序无法启动,因为其并行配置不正确。请参阅应用程序事件日志以了解更多详细信息。”
我在 Windows Vista x64 RTM 上打开了 32 位命令行,导航到 C:\Windows\sysnative,并尝试从那里调用 notepad.exe、calc.exe 等,但总是收到相同的错误。我还尝试卸载并重新安装 Microsoft Visual c++ 2008 Redistributable Packages,但无济于事。应用程序/安全/系统事件日志不包含与此相关的任何信息/警告/错误消息。此问题仅在 Windows Vista x64 RTM 上出现。有什么想法吗?
答案1
您缺少 C++ 运行时。使用以下命令运行命令提示符 (cmd.exe)管理权限并运行此命令:
SxsTrace Trace -logfile:SxsTrace.etl
现在运行导致 SideBySide 错误的脚本。
返回命令提示符,按 ENTER/RETURN 生成 SxsTrace.etl。现在输入以下内容:
sxstrace Parse -logfile:SxSTrace.etl -outfile:SxSTrace.txt
现在打开 SxSTrace.txt 跟踪并查看缺少哪个 VC++ 运行时。
如果您不确定,请将完整的 SxSTrace.txt 上传至云服务/pastebin 并在此处发布链接。
答案2
它仅发生在这台 Vista 机器上。
SysNative 变量在 Vista 64 位中可用,因此听起来更像是您的 Vista 的 WinSxS 已损坏。
解决 WinSxS 故障的最简单方法是重新安装操作系统。
另一种方法是强制获取 WinSxS 及其文件的所有权,然后从已知良好的 Vista 64 位机器复制文件,再将所有权改回来,并执行SFC /scannow
。
有关执行这些操作的更多细节超出了本问题的范围。