快訊
2026-10-15
電腦疑難雜症

Side-by-Side Configuration Incorrect 怎麼辦?用 sxstrace 找真正缺什麼

約 18 分鐘閱讀 · 14 次瀏覽
廣告

⚡ 本文重點

  • 文章屬性:疑難排除(應用程式無法啟動)
  • 適用系統:Windows 10、Windows 11(sxstrace 官方參考頁另列 Windows Server 2016 至 2025)
  • 難易度 / 耗時:★★☆ / 約 15–30 分鐘
  • 核心結論:只有缺件以 Microsoft.VC80 或 VC90 開頭時,才需要補 2005 或 2008 套件,v14 套件補不到;DebugCRT、Windows 內建組件與設定檔 XML 錯誤要改走其他修法。
  • 適用對象:開舊軟體或安裝程式時跳出「並列設定不正確」,裝過各版 Visual C++ 仍無效的人

📌 快速答案

一句話答案:Side-by-Side Configuration Incorrect 代表 Windows 無法依程式 manifest 產生啟用內容,原因包括找不到指定的並列組件,以及設定檔或 manifest 寫壞;先用事件檢視器或 sxstrace 讀出原因,再依結果補套件、修設定檔、修復系統檔或交給廠商。


🧰 開始前的準備

  • 適用系統:Windows 10、Windows 11;sxstrace.exe 為系統內建工具,位於 %windir%\system32
  • 權限需求:系統管理員。sxstrace 請在「以系統管理員身分執行」的命令提示字元中操作;微軟部落格封存文章的留言中,有人以一般權限執行 sxstrace 時遇到 Access is denied
  • 需要工具:事件檢視器與 sxstrace(皆為內建);想直接查看程式內嵌的 manifest,可另外下載 Sysinternals 的 Sigcheck(官方頁列出的執行環境為 Windows 11 以上;Windows 10 改用記事本開啟外部 manifest,或用 Windows SDK 的 mt.exe 取出內嵌 manifest)
  • 預計耗時:約 15–30 分鐘,不含下載與安裝套件
  • 動手前:先建立系統還原點,系統保護的開啟與建立方式見微軟的 System Protection 說明;要修改的設定檔先複製一份備份

🔍 症狀描述與錯誤訊息

雙擊程式或安裝檔之後,程式沒有啟動,只跳出一個錯誤對話框。英文版 Windows 顯示的訊息如下。

The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

繁體中文版的訊息,Microsoft Q&A 使用者貼出的文字開頭是「因為應用程式的並列設定不正確 所以無法啟動」,同樣提示去看應用程式事件記錄檔或使用 sxstrace.exe。英文訊息和微軟系統錯誤碼 14001(ERROR_SXS_CANT_GEN_ACTCTX,十六進位 0x36B1)的說明一字不差;「並列」就是 Side-by-Side,常簡寫為 SxS。

同一時間,事件檢視器的「應用程式」記錄裡,通常會多一筆來源為 SideBySide、事件識別碼 33 的錯誤。英文系統的描述格式如下,組件識別取自微軟 MSDN 部落格封存文章的範例。

Activation context generation failed for “C:\…..\App.exe”. Dependent Assembly Microsoft.VC80.DebugCRT,processorArchitecture=”x86″,publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32″,version=”8.0.50608.0″ could not be found. Please use sxstrace.exe for detailed diagnose.

中文系統寫成「”…” 的啟用內容產生失敗。 找不到依存組合 …。 請使用 sxstrace.exe 進行詳細的診斷。」(Microsoft Q&A 使用者貼出的事件內容)。「依存組合」後面那一整串,就是 Windows 找不到的組件,很多時候不必跑 sxstrace 就能判斷該補什麼。

出錯的也不一定是舊遊戲。Microsoft Q&A 有安裝程式本身就跳這個錯誤的案例,微軟開發者部落格也記錄過憑證、事件檢視器等 MMC 工具全部打不開的情況。


🔎 問題根因:Side-by-Side Configuration Incorrect 到底缺什麼

程式在 manifest 裡點名要某個並列組件,Windows 在 WinSxS 與程式資料夾都找不到相符的那一份,就會拒絕啟動程式。manifest 是一份 XML,可以內嵌在執行檔裡(資源類型 RT_MANIFEST),也可以是放在程式旁邊、名為「程式名.exe.manifest」的檔案。每個相依組件都用名稱、版本與處理器架構指定,共用組件還要加上代表簽署者的 publicKeyToken;微軟文件寫明,manifest 引用的組件識別必須和該組件自己的 manifest 完全相符。版本號可以被原則檔或設定檔重新導向,但兩者各有主、次版本的規則,細節見下方底層機制。

廣告

依 sxstrace 或事件記錄裡看到的那一行,可以分成五種情況,處理方式各不相同。

sxstrace 或事件看到代表什麼下一步
VC80/VC90 組件找不到(非 DebugCRT)缺 VC++ 2005/2008 執行階段裝同版本、同架構的套件
名稱含 DebugCRT程式是偵錯版建置向廠商取得正式版
Windows 內建組件系統檔或組件異常先 DISM 再 SFC
設定檔 XML 語法錯誤.config 或 manifest 寫壞重裝程式或還原備份
只有 generation failedsxstrace 未寫出原因把記錄交給廠商
Side-by-Side 錯誤判讀對照圖:VC80/VC90 組件找不到(非 DebugCRT)代表缺 VC++ 2005/2008 執行階段,應安裝同版本同架構的套件;名稱含 DebugCRT 代表程式是偵錯版建置,應向廠商取得正式版;Windows 內建組件代表系統檔或組件異常,先 DISM 再 SFC;設定檔 XML 語法錯誤代表 .config 或 manifest 寫壞,應重裝程式或還原備份;只有 generation failed 代表 sxstrace 未寫出原因,應把記錄交給廠商
  • VC80、VC90 的來歷:微軟文件說明,Visual Studio 2005 與 2008 的 CRT、MFC、ATL、OpenMP 等可轉散發程式庫,是以共用並列組件部署到 WinSxS;現行版本改採集中部署。
  • DebugCRT 沒有官方套件可裝:依微軟規定,偵錯版的程式與微軟提供的偵錯版 DLL 都不能散佈,只能複製到測試用的電腦。
  • Windows 內建組件補不到:以 Microsoft.Windows.Common-Controls 6.0.0.0 為例,微軟說明 ComCtl32.dll 第 6 版不可散佈,只存在於內含它的 Windows 版本。
  • 只剩一行 generation failed:Microsoft Q&A 有開發者把兩個 COM 元件的 manifest 重複宣告同一個介面,sxstrace 只給出這一行,微軟員工回覆 sxstrace 似乎抓不到這麼深的錯誤。

如果訊息寫的是找不到某個 DLL,例如 MSVCP140.dll,那屬於另一種錯誤:微軟文件把「程式沒有 manifest、又找不到 DLL」列為不同的訊息,修法見 MSVCP140 與 VCRUNTIME140 的 DLL 遺失錯誤修復教學。


🔬 底層機制:這個錯誤訊號從哪裡來?

Windows 啟動程式時,會依 manifest 產生一份「啟用內容」(activation context),把每個相依組件對應到實際要載入的版本;這一步失敗,程式就無法啟動。sxstrace 記錄的正是這個過程,每個程式一段,從 Begin Activation Context Generation. 開始,到 End Activation Context Generation. 結束。

  1. 讀取 manifest:Input Parameter 區塊列出處理器架構、manifest 路徑(ManifestPath)與應用程式設定檔(Application Config File),接著 INFO: Parsing Manifest File 讀出每一個 Reference。
  2. 套用繫結原則:記錄會寫 INFO: Applying Binding Policy.。發行者設定檔(publisher policy)可以把舊版號全域導向新版,應用程式設定檔可以只替單一程式改寫;沒有任何導向時,記錄寫 No binding policy redirect found.
  3. 探測組件:先找 WinSxS 裡的共用組件,找不到(Did not find the assembly in WinSxS.)再到程式資料夾找私用組件,記錄會出現 Attempt to probe manifest at 與探測的路徑;微軟文件列出的順序是程式資料夾裡的「組件名.DLL」(內嵌 manifest)、「組件名.manifest」,再到同名子資料夾找同樣兩種檔案。
  4. 失敗收尾:找不到的組件出現 ERROR: Cannot resolve reference,接著是 ERROR: Activation Context generation failed.,整段以 End Activation Context Generation. 結束。

新版 Visual C++ 為什麼補不了舊版的缺?繫結原則的導向只發生在同一個組件的不同版本之間。程式引用 6.0.0.0 時,Windows 找的是名為 policy.6.0.組件名 的發行者原則,微軟也要求原則檔不要跨主、次版本導向;應用程式設定檔的 bindingRedirect 則明文規定新舊版本的主、次版本必須相同。v14 套件採集中部署,本身不是 Microsoft.VC90 這類共用並列組件,所以導不過去。微軟下載頁也說明,v14 套件對應 Visual Studio 2015 以後的工具組,2013 以前的可轉散發套件則各自並存安裝。

系統錯誤碼也分得出層次。14001 是這個對話框的總括訊息;14003 的說明是「參照的組件沒有安裝在系統上」,14005 則是「manifest 檔含有一個以上的語法錯誤」。共用組件的 manifest 安裝在 %WINDIR%\WinSxS\Manifests\。

另一個判讀細節在 Input Parameter 的處理器架構欄位。Microsoft Q&A 貼出的記錄裡,這一欄出現過 AMD64 與 Wow32 兩種值,Wow32 那一段引用的正是 x86 組件。真正決定該裝 x86 還是 x64 套件的,是 Cannot resolve reference 那一行的 processorArchitecture。

廣告

🛠️ 解決方案

⚠️ 執行前先確認:下列方法會安裝執行階段套件、修改程式設定檔,或執行系統檔修復。動手前先建立系統還原點;要修改的 .config 或 .manifest 先複製備份。公司或學校管理的電腦,請先取得 IT 同意。

遇到下面任何一種情況就先停手,不要繼續往下做。

  • 出錯的程式來源不明,你不確定它是否可信
  • sxstrace 記錄裡找不到出錯程式的那一段
  • DISM 或 SFC 回報無法修復,或指令輸出和本文描述明顯不同

方法一:從事件檢視器讀出缺的組件

事件識別碼 33 的描述,通常就已經寫出缺的組件名稱、版本與架構。

  1. 按 Win + R,輸入 eventvwr.msc 開啟事件檢視器。
  2. 左側展開「Windows 記錄」,點選「應用程式」。
  3. 右側「動作」窗格選「篩選目前的記錄」(英文介面為 Filter Current Log),事件來源勾選 SideBySide。
  4. 找時間和你開啟程式相符、事件識別碼 33 的那一筆,記下「找不到依存組合」後面的整串組件識別。

事件檢視器怎麼篩選、怎麼看單筆事件的細節,可以參考 電腦當機、藍屏後想知道原因?用事件檢視器讀懂當機紀錄揪前兆。事件檢視器本身打不開時,改用 PowerShell 查同一份記錄。

$f = @{ LogName = 'Application'; ProviderName = 'SideBySide' }
Get-WinEvent -FilterHashtable $f -MaxEvents 5 |
  Format-List TimeCreated, Id, Message

Get-WinEvent 預設由新到舊輸出,-MaxEvents 5 只取最近 5 筆。

方法二:用 sxstrace 追出完整的繫結過程

事件記錄沒寫出組件名稱,或你想確認繫結原則與探測路徑時,改用 sxstrace。官方語法是 trace 開始追蹤、parse 把原始記錄轉成文字檔。

  1. 以系統管理員身分開啟命令提示字元,建立存放記錄的資料夾,再開始追蹤。
mkdir C:\sxs
sxstrace trace -logfile:C:\sxs\sxs.etl
  1. 追蹤開始後不要關閉視窗,回去再開一次出錯的程式,等錯誤訊息出現。
  2. 回到命令提示字元按 Enter 停止追蹤。加了 -nostop 參數時不會出現停止提示,改用 sxstrace stoptrace 結束。
  3. 把原始記錄轉成可讀的文字檔。
sxstrace parse -logfile:C:\sxs\sxs.etl -outfile:C:\sxs\sxs.txt
  1. 用記事本開啟 C:\sxs\sxs.txt,搜尋 ERROR。

追蹤期間,其他程式的繫結過程也會寫進同一份記錄。Microsoft Q&A 的案例裡就混著多段 Activation Context generation succeeded.,要找的是 ManifestPath 指向出錯程式的那一段;背景程式很多時,官方語法另有 -filter 參數,可以只輸出指定的應用程式。

廣告

關鍵的那一行長這樣。下面是微軟 MSDN 部落格封存文章的範例;前三行在原文是同一行,這裡為了閱讀斷開,第四行是緊接在後的另一筆記錄。

ERROR: Cannot resolve reference Microsoft.VC90.ATL,
processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",
type="win32",version="9.0.21022.8".
ERROR: Activation Context generation failed.
  • 名稱:Microsoft.VC90.ATL 的 VC90 對應 Visual C++ 9.0,也就是 Visual Studio 2008;ATL、CRT、MFC 等字尾代表不同的程式庫
  • version:前兩碼 9.0 對到微軟下載頁的「Visual Studio 2008 (VC++ 9.0)」,8.0 則對到 2005
  • processorArchitecture:x86 代表 32 位元,amd64 代表 64 位元
  • publicKeyToken:簽署者公開金鑰 SHA-1 雜湊的末 8 個位元組,用來確認是同一個發行者

另外兩種讀不出缺件的情況,處理方式不同。

  • 解析出來的檔案是空的:代表追蹤期間沒有重現錯誤。Microsoft Q&A 版主拿到空記錄時,先問的就是安裝當下有沒有在追蹤;重新追蹤,並在追蹤中再開一次出錯的程式。
  • 只有 Activation Context generation failed,前面沒有 Cannot resolve reference:在前面提到的 COM 元件案例中,兩個組件的 manifest 都已找到並解析,最後仍然失敗。這種情況把 manifest 和 sxstrace 記錄一起交給程式廠商處理。

方法三:依缺件補上正確版本的可轉散發套件

先修復或重新安裝出錯的程式,再依 sxstrace 的結果補套件。微軟的可轉散發套件下載頁寫明,想靠更新 Visual C++ 執行階段修好某個程式時,應向程式廠商確認做法;微軟文件也建議開發者在安裝應用程式前,先把可轉散發套件當成必要元件安裝,所以重新安裝有機會一併補回缺的組件。

安裝任何套件前,先到「設定」的應用程式清單,記下或截圖既有的 Visual C++ 2005、2008 Redistributable 項目與版本、架構,之後要回退時才分得出哪些是這次新增的。

缺件名稱開頭對應套件取得方式
Microsoft.VC90(DebugCRT 除外)VC++ 2008 SP1(9.0.30729.5677)微軟下載頁,x86/x64
Microsoft.VC80(DebugCRT 除外)VC++ 2005 SP1 MFC 安全性更新微軟下載中心
名稱含 DebugCRT沒有官方套件向廠商取得正式版
  • 架構要對:processorArchitecture 是 x86 就裝 x86 版,即使 Windows 是 64 位元。微軟說明 x86 套件會在 x86 與 x64 電腦上安裝 32 位元程式庫,64 位元組件也無法載入 32 位元程序。
  • 年份要對:2005 與 2008 的套件和新版並存安裝,不會互相取代。
  • 支援已結束:Visual Studio 2008 SP1 於 2018-04-10、Visual Studio 2005 於 2016-04-12 結束延伸支援,這兩個套件只在程式確實需要時安裝。
  • 不要從 DLL 下載站抓單一檔案:依微軟文件,Windows 在程式資料夾找私用組件時,找的是以組件名稱命名、內嵌 manifest 的 DLL、manifest 檔或子資料夾,組件識別也必須完全相符;下載站的單一 DLL 不一定滿足這些條件,來源也無法驗證。

裝完後重開程式;仍然失敗就再跑一次方法二,看 Cannot resolve reference 的組件是否換了一個。

方法四:設定檔或 manifest 寫壞了,修正或還原該檔

sxstrace 在 Parsing Application Config File 之後報 XML Syntax error,問題出在「程式名.exe.config」這個設定檔。應用程式設定檔和 manifest 放在同一個資料夾,檔名是執行檔名稱加上 .config,可以替單一程式改寫組件版本;sxstrace 的 Input Parameter 也會列出它的路徑。

微軟開發者部落格記錄過一個案例:mmc.exe.config 開頭少了一個 <,sxstrace 顯示 ERROR: Line 0: XML Syntax error.,憑證、事件檢視器等 MMC 工具全部打不開。作者先裝了 2008 與 2010 的 Visual C++ 套件都沒用,補回那個字元後才恢復。

  1. 從 sxstrace 記錄抄下 Parsing Application Config File 後面的完整路徑。
  2. 路徑在 C:\Windows 底下時屬於系統檔,不要憑猜測改寫,先做方法五的系統檔修復;路徑不在 C:\Windows 底下,再繼續下一步。
  3. 以系統管理員身分開啟命令提示字元,先複製一份備份,路徑換成你抄下的那一個。
copy "C:\路徑\程式名.exe.config" "C:\路徑\程式名.exe.config.bak"
  1. 第三方程式優先用修復或重新安裝還原設定檔;自行修改時,以系統管理員身分執行記事本,再從「檔案」功能表開啟該檔,只修正記錄指出的語法問題。

報錯的是 manifest 檔時,系統錯誤碼 14005 的說明就是 manifest 含有語法錯誤。開發者可以用 Windows SDK 內附的 mt.exe -manifest 檔名.manifest -validate_manifest 檢查格式是否符合結構描述。

方法五:缺的是 Windows 內建組件,用 DISM 與 SFC 修復

缺件是 Microsoft.Windows.Common-Controls 這類 Windows 內建組件時,可轉散發套件補不到。微軟把 DISM 與 SFC 定位為掃描損毀系統檔、還原遺失或受損 Windows 元件的內建工具,在系統管理員命令提示字元依序執行。

DISM.exe /Online /Cleanup-image /Restorehealth
sfc /scannow

微軟說明 DISM 要先執行,由它提供修復損毀檔案所需的檔案,預設從 Windows Update 取得;SFC 執行期間不要關閉視窗,直到驗證跑到 100%。SFC 回報找到損毀但無法修復時,依微軟文件查看 CBS.log 的細節,仍無法解決再考慮 Windows 的復原選項。


✅ 驗證修復結果

重新開一次原本出錯的程式,能正常啟動之外,還要確認事件記錄不再新增同一筆錯誤。

  • 程式能開,且事件檢視器「應用程式」記錄中,開啟時間點之後沒有新的 SideBySide 事件 33
  • 再跑一次方法二的 sxstrace,出錯程式那一段出現 INFO: Activation Context generation succeeded.,其後以 End Activation Context Generation. 結束
  • 同一台電腦上其他依賴同一組件的程式也一併測試;裝了 x86 套件後,同一程式的 64 位元版本仍需要 x64 套件

🔙 萬一翻車:回退步驟

本文會改動系統的操作有三類:安裝可轉散發套件、修改設定檔,以及執行 DISM 與 SFC。

情境一:裝錯套件或裝了不需要的版本

到「設定」的應用程式清單,對照方法三安裝前記下的清單,只解除安裝這次新增的 Visual C++ 2005 或 2008 Redistributable 項目;無法確定是不是這次新增的,就保留不動。

情境二:改完設定檔,程式或系統工具反而更糟

以系統管理員身分開啟命令提示字元,用修改前的備份覆蓋回去。

copy /y "C:\路徑\程式名.exe.config.bak" "C:\路徑\程式名.exe.config"

情境三:DISM 或 SFC 之後系統出現異常

用動手前建立的系統還原點還原,可按 Win + R 輸入 rstrui.exe 開啟系統還原。若 SFC 回報有無法修復的檔案,先依微軟文件把 CBS.log 裡的 [SR] 紀錄匯出保存,再決定下一步。


💡 總結:預防再次發生

這個錯誤的解法取決於事件記錄或 sxstrace 指出的是哪一種問題(缺哪個組件、設定檔或 manifest 寫壞,或只有 generation failed),比較穩的做法是先讀出原因再動手。微軟開發者部落格的案例裡,作者把 2008 與 2010 的 Visual C++ 套件都裝了仍然無效,真正的原因是設定檔少了一個字元;先看 sxstrace,能省下這類白工,也不會在系統裡留下一堆用不到的套件。

  • 安裝舊軟體前,先看安裝程式或官網有沒有列出所需的 Visual C++ 版本與架構
  • 32 位元程式在 64 位元 Windows 上執行,要補的是 x86 版的組件
  • 不從 DLL 下載站抓單一檔案補洞,組件識別與來源都無法確認
  • 公司內部的舊工具若依賴偵錯版執行階段(DebugCRT),請開發單位改用正式版建置重新發佈

❓ 常見問題

Q:這個錯誤到底是缺什麼?

Windows 找不到程式 manifest 點名要的某個並列組件時,就會跳這個錯誤,名稱、版本、架構任一項對不上都算缺;設定檔或 manifest 的 XML 寫壞,也會出現同一個錯誤。事件檢視器 SideBySide 事件 33 的描述,或 sxstrace 的 Cannot resolve reference 那一行,會寫出完整的組件識別。

Q:sxstrace 怎麼用?

以系統管理員身分開啟命令提示字元,先執行 mkdir C:\sxs 建立存放記錄的資料夾,再執行 sxstrace trace -logfile:C:\sxs\sxs.etl,重現錯誤後按 Enter 停止,再用 sxstrace parse 把記錄轉成文字檔,搜尋 ERROR 即可。完整指令見方法二。

Q:裝 VC++ 就會好嗎?

只有缺件以 Microsoft.VC80 或 Microsoft.VC90 開頭,而且你裝的是同年份、同架構的套件時才有用。缺件含 DebugCRT、屬於 Windows 內建組件,或問題出在設定檔 XML 時,裝再多版本也沒用;最新的 v14 套件對應 Visual Studio 2015 以後的工具組,補不到 2005 與 2008 的組件。

Q:要怎麼看 manifest 缺哪個版本?

程式旁邊若有「程式名.exe.manifest」,直接用記事本開啟,看 dependentAssembly 底下的 assemblyIdentity。manifest 內嵌在執行檔裡時,可以用 Sysinternals Sigcheck 的 -m 參數傾印(官方頁列出的執行環境為 Windows 11 以上),開發者也可以用 Windows SDK 的 mt.exe -inputresource:程式名.exe;#1 -out:app.manifest 取出。

Q:修完之後又復發怎麼辦?

manifest 可以列出多個相依組件,Microsoft Q&A 的 COM 案例就有兩個;重新追蹤一次,確認記錄裡是否還有其他 Cannot resolve reference。若還是同一個組件,檢查裝的套件架構和 processorArchitecture 是否相符,以及程式資料夾的設定檔是否把版本導向了一個沒有安裝的版本。

Q:Windows 10 和 Windows 11 做法一樣嗎?

一樣。sxstrace 官方參考頁同時列出 Windows 10 與 Windows 11。差別在 Sigcheck:官方頁列出的執行環境為 Windows 11 以上,Windows 10 可改用記事本開啟外部 manifest,或用 mt.exe 取出內嵌的 manifest。


🔗 延伸閱讀


📎 參考資料來源

📖 第一級|廠商官方:

📖 第二級|社群案例(Microsoft Q&A,僅作訊息格式與案例參考):

⚠️ 本文核心事實以第一級為準,第二級為補充。

📅 本文查證戳記:2026-09-27 依據 Microsoft Learn 之 sxstrace 參考頁、並列組件與 Visual C++ 可轉散發套件相關文件查證撰寫,內容整理自官方文件與公開案例,未在實機上執行。

若你在後續版本遇到步驟失效,歡迎在留言區回報。


廣告