从批处理文件运行便携式Qt app可执行文件

时间:2015-01-15 11:03:25

标签: windows qt batch-file

Windows快捷方式具有在将文件移动到其他驱动器时取消引用的绝对路径。我希望用户点击与子目录中所有Qt dll文件分开的文件,而不是快捷方式。

我创建了一个位于可执行文件上方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快捷方式正常运行并且批处理文件失败?

1 个答案:

答案 0 :(得分:0)

我已使用您的内容在我的程序的父文件夹中创建了program.bat,可以使用

它是在未安装Qt的机器上测试的。操作系统是Windows 7

这是示例应用程序结构

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

program.bat包含:

@start "" "bin\program.exe"

请确保您的应用程序部署得很好。

我在我的pro文件中使用它来确保正确部署每个版本:

# 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
    }
}