2015-01-15 36 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