最近在做一个涉及到海康监控的实现,里面用到了自动搜索局域网内的海康设备的功能,这个功能需要用到管理员权限,我通过修改vs的属性->配置属性->链接器->清单文件中的UAC执行级别为管理员后,测试代码发布的程序运行得好好的。
但是在实际的项目发布出来的Relese程序,直接点击怎么样都不能搜索到设备,而右键选择管理员模式运行就可以正常工作,同时在VS中运行直接运行不管是Release版本还是Debug版本,都是可以正常搜索到设备的。我还试着到发布Debug版本,结果也是能正常的。
出了鬼了,我是在程序要正式发布前夕才发现了这个问题,正要人命!(还要提一句,Windows10上面通过修改上面提到的配置,发布出来的exe是没有带盾牌的,所以我也没办法直接通过看这个盾牌来确定它已经是有管理员权限了)。当天已经快下班了,我一直在公司找资料和试验到很晚了还没找到解决办法。回到家后,我灵光一闪想到,既然测试程序的Release是正常运作的,那么修改UAC的配置肯定是没有问题的。正式程序中是不是还有别的设置导致这个问题?第二天,我一项一项比对项目配置的属性,终于让我找到了问题所在:
把它修改后,程序终于可以正常工作了。
我后面还做了一下测试,发现新创建的工程,这个嵌入清单选项默认是选择“是”,至于工作工程为什么选了否,初步怀疑是优化工作时做的修改