2015-01-15 34 views
0

Windows快捷方式具有在將文件移動到其他驅動器時不參考的絕對路徑。我希望用戶點擊一個與子目錄中的所有Qt dll文件分開的文件,而不是一個快捷方式。從批處理文件運行便攜式Qt應用程序可執行文件

我已經創建了一個位於可執行文件上方1個目錄的批處理文件,並有一個相對路徑來運行該文件。

release 
    + db 
    + plugins 
     + platforms 
     + iconengines 
     + imageformats 
    - Qt5Core.dll 
    - program.exe 
    - etc.... 
program.bat 

//paths set in main() 
QCoreApplication::AddLibraryPath("plugins"); 

我發現下面的代碼是從this question

@start "" "\release\program.exe" 

但在運行時,錯誤消息 「Windows無法找到。」 顯示

我也試過

@start "" "release\program.exe" 

@start "" "%CD%\release\program.exe" 

@start "" "%~dp0\release\program.exe" 

但我得到一個關於Qt沒有找到「windows」平臺插件的錯誤,這似乎表明路徑有問題。

爲什麼程序可以正確運行一個Windows快捷方式,並且批處理文件失敗?

+0

請問你的程序運行時不會從QtCreator運行? – fbucek

+0

你有路徑在哪裏你的程序這個文件:release/platforms/qwindows.dll? – fbucek

+1

我在問,因爲快捷方式可能會使用您的環境設置,Qt的路徑在哪裏,所以它會查找所有需要的dll,批處理文件是否可以具有「乾淨環境」,這就是爲什麼您的程序會抱怨缺少插件。嘗試在乾淨的環境中運行程序,meybe它也將無法運行,問題在別的地方。 – fbucek

回答

0

我已經在您的內容的程序的父文件夾中創建了program.bat,並且它的工作原理是

它在未安裝Qt的機器上進行測試。操作系統是Windows 7

這是示例應用程序的結構

bin 
    + platforms 
    + iconengines 
    + imageformats 
    - Qt5Core.dll 
    - program.exe 
    - etc.... 
program.bat 

program.bat包含:

@start "" "bin\program.exe" 

因此,請確保您的應用程序以及部署。

我用這個在我的親文件,以確保每一個版本是正確部署:

# Deployment 
CONFIG (release, release|debug) { 
win32 { 
     QMAKE_POST_LINK = windeployqt $${DESTDIR}/$${TARGET}.exe --no-translations 
     # Not necessary when path to VC libraries is correctly set 
     externalLibs.files += somepath/_windeploy_/msvcr120.dll 
     externalLibs.files += somepath/_windeploy_/msvcp120.dll 
     externalLibs.path = $$DESTDIR 
     # need to add additional build step (make): install 
     INSTALLS += externalLibs 
    } 
} 
+0

我編輯了一下我的問題。部署代碼是否可以按原樣添加? – rrrfusco

+0

您應該訪問您的程序。我使用DESTDIR變量,因此它適用於我所有的贏項目。 嘗試添加此消息($$ {DESTDIR}/$$ {TARGET} .exe) 如果它指向您可執行它的確定。如果不修改或嘗試修改windeploy的路徑 或者只是在發佈文件夾的命令行中運行windeployqt program.exe。 – fbucek