一、拖放(Drag and Drop)的功能为什么第一次不行?
如果当前的系统是以管理员的身份运行的,你的打包脚本,譬如:inno setup, nsis, Qt自带的打包程序...,都是默认的管理员权限。所以第一次打开程序就是管理员的权限,而QT的Drag and Drop功能不支持以管理员权限,所以,出现安装包第一次安装启动后,拖文件到应用程序出现禁止图标。如何解决这一问题?有人说,安装包不给管理员权限不就解决问题了吗?确实如此,但你有没有想过,如果用户安装到C盘,你可能连读写文件的权限都没有呢。这不是一个明智的解决方案。当然,我们想到了应该要降权来解决这个问题。所以,我先讲我的解决方案。
二、解决方案
解决的思路是这样的:
1. 打包脚本在启动程序的时候,要降低权限。window10以上的系统,对文件的读写权限分的很严格,在我尝试的过程中,发现资源管理器的权限就能够满足我们对文件的所有操作,对c盘的读写,包括实现拖拽文件等。所以,我们应该要降低权限到跟资源管理器的权限一致,怎么做到?那不就是用资源管理器启动程序,就达到了同权限的目地。所以,你应该在你的脚本当中,以explorer.exe 启动程序。我的脚本是写了一个bat,用打包程序运行它:
install.bat:
start "" "explorer.exe" "xxxxx.exe"
这样启动的程序就是和资源管理器同级别的权限了。但是,这还不够。