我已經使用工具鏈和 Qt-Installer 一起將 Qt 5.12.12 應用程式從 Linux 移植到 Windows 11:QtCreator、MinGW 7.30、amd64、C 。到目前為止,一切正常,除非我將應用程式(通過 Inno Setup Studio 安裝程式,包括所有使用的 *.dll 檔案)部署到“程式檔案”。
當程式(名為“orange”)駐留在C:/Program Files/ORANGE/orange.exe其中時,它將永遠不會啟動,除非“以管理員身份運行”。當我將確切的檔案夾重命名C:/Program Files/ORANGE為 時C:/ORANGE,一切正常,無需“管理員權限”;該應用程式運行完美。在D:/驅動器上的任何檔案夾上都相同。
從C:/Program Files/ORANGE/orange.exe程式啟動時靜默失敗,但在 Windows 事件日志中,我可以在“計算機管理->系統工具->事件查看器->自定義視圖->管理事件”中看到類似的條目:
錯誤的應用程式名稱:orange.exe,版本:1.1.0.0,時間戳:0x61ca2b05 錯誤模塊名稱:libgcc_s_seh-1.dll,版本:0.0.0.0,時間戳:0x00000000 例外代碼:0x40000015 故障偏移:0x000000000000d125 錯誤的行程 ID:0x5b90 錯誤的應用程式開始時間:0x01d7fb68b04bbb8e 錯誤的應用程式路徑:C:\Program Files\ORANGE\orange.exe 錯誤模塊路徑:C:\Program Files\ORANGE\libgcc_s_seh-1.dll 報告編號:3ccd12e6-cfd5-4cff-8d1b-c5450716a821 錯誤包全名: 錯誤的包相關應用程式 ID:
我通常不是 Windows 開發人員,因此非常感謝有關如何進一步除錯或解決此問題的任何幫助。
uj5u.com熱心網友回復:
事實證明,@drescherjm 做對了:我的應用程式確實嘗試將日志檔案寫入自己的作業目錄(這在我之前的 Linux 設定中很好)。將日志位置移動到%appdata%(ie QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)) 確實解決了問題。
...當我使用 boost::log 時,我被libgcc_s_seh-1.dll錯誤日志中的參考誤導了。讓我想起了改進/審查日志清晰度;)
謝謝大家的幫助!
uj5u.com熱心網友回復:
嗨,找出這是權限錯誤還是依賴問題(或兩者兼有:)的最佳方法是下載依賴遍歷器https://www.dependencywalker.com/并在 .exe 檔案上運行它。在您的情況下,它似乎在您的本地檔案夾而不是運行時檔案夾(可能只能由管理員訪問)中尋找庫(.dll)
解決方案是
按照上述評論中的建議更改庫檔案夾權限
將普通用戶的權限更改為高級用戶(本地管理員可以顯式訪問 admin 檔案夾)
在Systems Environment Variables中的PATH中添加參考庫的路徑
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/396806.html
