最近换用Windows7系统了,可是在用LabVIEW发布可执行文件后出现了一个新的问题。那就是在进行一些文档的读写操作时提示权限不够。究其原因,是Win7采用了比XP更严格的权限等级。
Win7把可执行文件的执行等级分为3级:
asInvoker:以普通用户权限运行程序,不会提示需要取得管理员权限,不能读写受保护的文档。这也是LabVIEW发布exe文件的默认等级。
highestAvailable:以能够取得的最高权限运行程序。如果当前用户只有普通用户权限,则不会提示需要取得管理员权限,也不能读写受保护的文档;如果当前用户为管理员权限,则在运行时弹出一个窗口提示需要确认使用管理员权限运行程序,确认后可以读写受保护的文档。
requireAdministrator:运行时弹出界面,要求确认已管理员权限运行程序,或者要求输入管理员密码。确认后可以读写受保护的文档。
由以上可以看出,我们需要把执行等级提高到requireAdmministrator才能正常的读取受保护的文档。而这个等级是由manifest属性来控制的,要修改它需要使用微软提供的manifest 工具即mt.exe.(在附件中提供了下载)
把mt.exe放到和要修改的exe文件相同的目录下(不是必须这样做,但这样可以省去输入长串的路径),打开命令行cmd.exe并进入该目录, 输入以下命令(假设要修改的exe文件的名称为XXX.exe):
mt.exe -inputresouce:"XXX.exe" -out:"XXX.manifest"
该目录下会生成一个XXX.manifest文件,用记事本打开,会看到它是一个XML格式的文档,大体内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
把其中的 level="asInvoker"修改为level="requireAdministrator"并保存。
然后在命令行中输入以下命令:
mt.exe -manifest "XXX.manifest" -outputresource:"XXX.exe"
如果没有报错,就修改成功了,exe文件的图标上会多一个小盾牌,也可以删除manifest文档后再次执行第一条命令来确认。
如果报错,很可能是拼写错误。
参考文献:
http://zone.ni.com/reference/en-XX/help/371361F-01/lvconcepts/uac_app_manifests_and_dgsn/
http://zone.ni.com/reference/en-XX/help/371361F-01/lvhowto/editing_app_manifests/
转载于:https://blog.51cto.com/genreeze/560630