天天看點

Qt應用程式“xxx.exe 已停止工作 故障子產品msvcr120.dll”

Qt應用程式“xxx.exe 已停止工作 故障子產品msvcr120.dll”

    • 一、問題描述
    • 二、解決辦法:
    • 三、遺留的問題:

一、問題描述

相信許多程式員都遇到過這種問題,好不容易寫好程式,準備打包啦。在自己電腦上運作時,一切都很正常,放到其他電腦上死活運作不起來、要麼出現很多問題,最糟糕的是直接崩潰!最近就遇到了一個讓我崩潰的問題,在其他電腦上運作時一直出現“xxx.exe 已停止工作 故障子產品msvcr120.dll”,使用各種修複工具修複dll,使用depenency walk找各種依賴庫都沒有解決該問題。錯誤截圖如下:

Qt應用程式“xxx.exe 已停止工作 故障子產品msvcr120.dll”

二、解決辦法:

1、在嘗試了各種辦法之後沒有效果,就把工程直接一直到另外一台電腦上編譯好可執行程式再運作,打包後竟然可以運作啦。但是在把這個程式移植回來,還是會出現上述錯誤,于是我就對比到底哪裡出了錯。最後發現是路徑的問題。因為程式中有些地方使用的是相對路徑,打包後程式路徑發生變化啦,是以才導緻的上述錯誤。問題是發現啦,下面就是解決啦。

2、首先想到的是通過找到可執行程式的路徑再去找檔案的相對路徑的方法,于是我想到了Qt中的函數QApplication::applicationDirPath()擷取可執行程式的路徑+檔案名稱,再轉化成const char類型(因為我需要傳這種類型),結果還是出現上面的錯誤。于是各種qDebug(),路徑都沒有問題,打包之後就是不行。最後抱着試試的态度,調用微軟的API接口GetModuleFileName()函數,擷取路徑再轉化成const char竟然解決問題了。

三、遺留的問題:

為什麼使用QApplication::applicationDirPath()擷取可執行檔案路徑再轉化成const char*方法不行而GetModuleFileName()函數可以?有知道的請指教,謝謝!

繼續閱讀