运行 从批处理文件中可执行的便携式 Qt 应用程序

Run portable Qt app executable from 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 cannot find.."

我也试过了

@start "" "release\program.exe"

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

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

但是我收到关于 Qt 找不到 "windows" 平台插件的错误,这似乎表明路径有问题。

为什么程序 运行 使用 windows 快捷方式可以正常运行,而批处理文件会失败?

我已经使用您的内容在我的程序的父文件夹中创建了 program.bat,它有效

在未安装Qt的机器上测试。 OS 是 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
    }
}