应用程序如何以管理员权限运行

  • 起因
  • 开发环境及程序简述
  • 开发环境
  • 程序功能
  • 参考资料连接
  • 解决方案
  • 方案一
  • 方案二
  • 方案三
  • 总结

*个人博客开张,以后每周将分享自己一些项目经验和整合的工具*

起因

最近在做一个项目,项目中用到了JNA(java调用C++ dll动态库),在开发测试阶段中测试运行均没问题,在客户电脑上运行显示结果正常,实际程序没有运行成功,花了一个晚上的时间最后发现程序以管理员权限运行才能正常运行成功,然后上网找了些资料,原来是微软引入了UAC机制

开发环境及程序简述

本文不涉及具体项目内容,往后将分享一些项目技术点

开发环境

  1. Java开发环境:eclipse+JDK8+JNA
  2. C++开发环境:VS2013(V120)
  3. 操作系统:Win10 64位

程序功能

程序(后面简称为A)能够正常操作运行需要调用并运行某款软件(后面简称为B),简单来说B程序有个登录界面,A程序中操作调用B登陆界面自动完成输入并登录,A界面使用JAVA开发的,自动登录过程采用C++编写,两者间通过JNA调用DLL动态库实现

参考资料连接

  1. MSDN:http://msdn.microsoft.com/en-us/library/bb756929.aspx

解决方案

方案一

以管理员权限运行

操作方法: 引用软件右键—>以管理员方式运行
 利弊: 操作简单,但每次都要右键操作,用户体验差,直接双击才是用户正常操作习惯

java 管理员权限运行exe 以管理员身份运行java程序_开发环境

方案二

修改应用软件兼容性

操作方法: 引用软件右键—>兼容性—>勾选以管理员身份运行
 利弊: 设置完之后每次运行软件都会以管理员身份运行,但把该软件拷贝到其他电脑后又要重新设置

[](https://i.imgur.com/

java 管理员权限运行exe 以管理员身份运行java程序_java 管理员权限运行exe_02

.gif)

方案三

VS2013编译项目时设置UAC

操作方法: 项目右键—>属性—>配置属性—>连接器—>清单文件—>UAC执行级别(选择 requireAdministrator)—>重新编译
  利弊: 编译完之后,应用图标便多了一个盾牌,应用软件每次运行便会弹框提示是否以管理员权限运行

java 管理员权限运行exe 以管理员身份运行java程序_管理员权限_03

java 管理员权限运行exe 以管理员身份运行java程序_管理员权限运行_04


java 管理员权限运行exe 以管理员身份运行java程序_管理员权限_05

总结

当应用程序需要实现修改系统注册表、获取其他应用窗口句柄并完成控制操作等功能时,需要以管理员权限才能正常运行实现对应功能,方案2+方案3一起使用效果是最理想的