【轉發】win7下運行exe失敗:應用程序無法啟動,並行配置不正確


摘自:http://blog.csdn.net/humanking7/article/details/51926224

1.問題描述

承接了一個項目,給甲方交接的時候,在它的電腦中運行出現了這個錯誤。

應用程序無法啟動,因為應用程序的並行配置不正確。有關詳細信息,請參閱應用程序事件日志,或使用命令行 sxstrace.exe 工具

當時沒有截圖,不過圖像的效果是這樣的:

pic1

因為他們是新裝的系統,給他們裝的是Win7 32bit的系統,其它什么都沒安裝,根據網上的說明,估計是兩個問題。

  1. 系統設置問題,設置不正確;
  2. 如果1的問題解決了,還出現問題。則系統缺少Microsoft Visual C++ 20XX(運行庫)文件(XX表示:05、08、10)。

2.網上解決的一般方法

2.1 對於系統配置不正確

  1. 開始 - 運行(輸入services.msc)- 確定或回車,打開:服務(本地);

這里寫圖片描述 
2. 我們在服務(本地)窗口找到:Windows Modules Installer服務,查看是否被禁用;

這里寫圖片描述 
3. 如果Windows Modules Installer服務被禁用,我們必須把它更改為啟用 - 手動,重啟計算機,再安裝應用程序。

這里寫圖片描述

2.2 對於缺少Microsoft Visual C++ 20XX(運行庫)

網上是去百度上搜索對應的庫下載安裝。 
我是直接用驅動精靈里面系統助手系統組件進行自動修復。

這里寫圖片描述

3.問題依然存在

出現這樣錯誤是因為系統缺少某些運行庫,用sxstrace工具可以看究竟,用法:

  1. 管理員運行cmd ,輸入:SxsTrace Trace -logfile:SxsTrace.etl,啟動跟蹤;

  2. 執行目標程序,在彈出錯誤對話框后(不要關閉對話框);

  3. 回到cmd命令行,按回車鍵,然后輸入執行命令:SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt

下面是我運行的情況:

C:\Windows\system32SxsTrace Trace -logfile:SxsTrace.etl 
已啟動跟蹤。跟蹤將保存到文件 SxsTrace.etl。 
按 Enter 停止跟蹤…

C:\Windows\system32>SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt 
正在分析日志文件 SxsTrace.etl… 
分析完畢! 將輸出保存到文件 SxsTrace.txt。

C:\Windows\system32>

打開SxsTrace.txt,下面是其內容:

=================
開始生成激活上下文。
輸入參數:
    Flags = 0 ProcessorArchitecture = x86 CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en ManifestPath = D:\nwpu\simulation_mapSendUDP\Test_SendPackUDP.exe AssemblyDirectory = D:\nwpu\simulation_mapSendUDP\ Application Config File = ----------------- 信息: 正在解析清單文件 D:\nwpu\simulation_mapSendUDP\Test_SendPackUDP.exe。 信息: 指令清單定義標識是 (null)。 信息: 參考: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" 信息: 正在解析參考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 信息: 正在解析 ProcessorArchitecture x86 的參考。 信息: 正在解析區域性 Neutral 的參考。 信息: 正在應用綁定策略。 信息: 未找到發布服務器策略。 信息: 未找到綁定策略重定向。 信息: 開始程序集探測。 信息: 未找到 WinSxS 中的程序集。 信息: 嘗試在 C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL 上探測指令清單。 信息: 嘗試在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT.DLL 上探測指令清單。 信息: 嘗試在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT.MANIFEST 上探測指令清單。 信息: 嘗試在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL 上探測指令清單。 信息: 嘗試在 D:\nwpu\simulation_mapSendUDP\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST 上探測指令清單。 信息: 未找到區域性 Neutral 的指令清單。 信息: 結束程序集探測。 錯誤: 無法解析參考 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 錯誤: 生成激活上下文失敗。 結束生成激活上下文。

從中得到一些信息:

“錯誤: 無法解析參考 Microsoft.VC90.DebugCRT,processorArchitecture=”x86”,publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32”,version=”9.0.21022.8”。

錯誤: 生成激活上下文失敗。”

可以知道出錯的exe是用VC90編譯器編譯的(我其中一個類庫使用VS2008編譯的),VC90是visual studio 2008 中的C++開發工具。 安裝visual studio 2008 中的C++開發工具后,就可以運行了。

簡單的解決辦法: 
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\amd64\Microsoft.VC90.CRT 
將其中的所有文件(Microsoft.VC90.CRT.manifest,msvcm90.dll,msvcp90.dll,msvcr90.dll)拷貝到你的exe文件同級別的位置即可,或根據編譯所用的vc版本來找到相應的文件

但是,還是不行,於是我,給目標環境裝了VS2008,問題完美解決。什么鬼!什么鬼!什么鬼!,就這樣吧,許多問題對我來說,依然是玄學問題。

我提出了一個設想,如果這個程序調用的那個類庫LIB(就是我用VS2008編寫的),如果用靜態編譯,是不是不會出現這個問題,當然我也不可能為了測試這個軟件把現在電腦里的VS2008卸載了,以后有機會在測測吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM