最近在做东西的时候因为需要监控电脑硬件的温度,CPU占用率,风扇转速等等,需要使用管理员权限启动才能获取到正确的数据。但是并没有方便的方法设置exe让他默认申请管理员权限,在网上查了一圈之后解决了,所以写一个帖子记录一下,以免之后忘记了方便查阅。
最终解决办法:修改Unity自带的WindowsPlayer sln工程文件,并设置为需要管理员权限重新编译。
参考文章:
www.likecs.com/show-203428278.html?sc=1942.6666259765625#sc=1949
www.cnblogs.com/WH-Work/p/15874391.html
先说一下我的环境,VS2022 + Unity2022.1.20f1c1。
具体步骤
一、安装C++环境
打开VisualStudioInstaller,选择修改,勾选使用C++的桌面开发

勾选使用C++的桌面开发
切到单个组件中,搜索140,勾选MSVC v140 - VS 2015 C++ 生成工具(v14.00)

勾选MSVC v140 - VS 2015 C++ 生成工具(v14.00)
搜索windows,确保至少有一个Windows10SDK

Windows10SDK
都选好后安装并等待完成。
二、修改WindowsPlayer sln并编译
在UnityHub中选择自己使用的编辑器版本,点在资源管理器中显示

在资源管理器中显示
打开文件夹后,继续找到此文件夹下的Data\PlaybackEngines\windowsstandalonesupport\Source\WindowsPlayer文件夹,此时我们可以看到sln文件

找到sln
打开sln,你很有可能看到VS请求权限提升,选带盾牌的这个,并在权限申请中选是,然后在重新启动过的vs中打开刚才的sln。

权限提升
再接下来,它可能会提醒你重定向项目。

重定向项目
将Windows SDK版本选择自己电脑上安装的版本,然后平台工具集选择无升级

修改重定向设置
当然,如果你是在安装平台工具之前打开的sln,可能看不到这个,但是待会编译的时候会报错找不到windows sdk,这时,你可以右键项目,选属性,然后找到这里手动改一下。

手动修改平台版本
接下来,你可能发现WindowsPlayer这个项目显示WindowsPlayer (已卸载),不慌,右键它,选择编辑项目文件。如果你这里和我不一样,没有显示编辑项目文件,可以先点一下上面的重新加载项目,应该会报一个错,之后再右键就有编辑项目文件了。

右键,编辑项目文件
在打开的vcxproj文件中,翻到最底下,找到Import Project="UnityData.vcxitems" Label="UnityData"这一行,整行删除或者注释掉。

找到目标行

注释掉
保存文件,然后再次点击重新加载项目,此时项目文件恢复正常。

恢复正常
接下来,打开WindowsPlayer.manifest文件,找到level="asInvoker",并修改为level="requireAdministrator"

修改权限
然后,将目标配置改为Release版本

改为Release
右侧的架构根据需要选择,我选择x64,毕竟是2022年了,没多少人还在用32位的了,不考虑这部分用户了。
然后,在右侧选择WindowsPlayer,右键,生成或者重新生成都可以。

编译生成
如果此步骤时出现报错说你Windows SDK版本不对,可以手动右键项目->属性,手动改一下。
打开输出文件夹,发现此时WindowsPlayer上已经带上了盾牌标志,说明打开此exe时会进行权限请求。

编译结果
之后,回到编辑器文件夹,找到Variations文件夹下自己需要的模板,我这里需要64位非开发者模式,所以打开Variations\win64_player_nondevelopment_mono文件夹。将WindowsPlayer.exe文件替换为我们刚刚编译好的,记得备份一下原来的版本,万一以后还需要呢。注意,不要备份在同一文件夹中,因为就算改名了,游戏打包的时候也会一起复制过去。

替换exe
三、编译游戏
重启Unity,打包游戏。
可以看到,此时游戏已经有小盾牌需要申请管理员权限了。

结果