go windows程序使用管理员权限运行
go windows程序使用管理员权限运行
背景
写了一个windows日志收集的小工具,部分操作需要管理员权限,从网上找了几篇文章,思路都是通过Windows的.Manifest xml文件构建syso,然后打包运行即可,在此参考了几篇文章,CSDN居多,不止百度,谷歌上CSDN的文章也排名也比较靠前,但是部分文章思路没问题,但是你们的.manifest配置文件xml数据都没有闭合,导致博主在实验的时候走了不少弯路,对你们各种不负责转载的现象进行批评。以下是搜索引擎截图,部分manifest文件内容缺失,会导致程序抛出异常,对于新手,这很不友好。
windows manifest文件介绍
引用微软官方docs
An application manifest is an XML file that describes and identifies the shared and private side-by-side assemblies that an application should bind to at run time. These should be the same assembly versions that were used to test the application. Application manifests may also describe metadata for files that are private to the application.
通俗来讲,Manifest事实上就是一个以.manifest为后缀的XML文件,用于组织和描述隔离应用程序及并行组件,其内部的信息如
go windows程序使用管理员权限运行
1、获取rsrc
1 |
|
在项目根目录中创建*.manifest文件(文件名没有过多局限,不过按照要求来也没错)
文件内容如下:
1 |
|
网上部分转载摘抄的文章中有的少抄了最后一行,会导致程序抛出异常,报错:应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。
2、编译 *.syso
编译命令如下:
1 |
|
文件名没啥要求
3、go编译打包
1 |
|
然后测试运行一下,看是否提示申请管理员权限。
4、优化
如果需要做到windows全系列兼容,可以在<assembly>
标签下面增加以下内容:
1 |
|
支持Windows 6.0界面库、支持管理员权限、兼容WIN8/WIN10下取系统版本、兼容DPI Aware,完整manifest可以参考https://blog.csdn.net/cometnet/article/details/52995192
参考
- https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests【Application Manifests】
- https://blog.csdn.net/cometnet/article/details/52995192【比较完整的Windows应用程序清单文件 manifest.xml】
- https://github.com/akavel/rsrc
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!