Unity笔记 Unity打包exe并设置以管理员权限运行
宵夜97
2022年10月31日 21:32
收录于文集
共3篇

最近在做东西的时候因为需要监控电脑硬件的温度,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&#​34; Label="UnityData&#​34;这一行,整行删除或者注释掉。

找到目标行

注释掉

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

恢复正常

接下来,打开WindowsPlayer.manifest文件,找到level="asInvoker&#​34;,并修改为level="requireAdministrator&#​34;

修改权限

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

改为Release

右侧的架构根据需要选择,我选择x64,毕竟是2022年了,没多少人还在用32位的了,不考虑这部分用户了。

然后,在右侧选择WindowsPlayer,右键,生成或者重新生成都可以。

编译生成

如果此步骤时出现报错说你Windows SDK版本不对,可以手动右键项目->属性,手动改一下。

打开输出文件夹,发现此时WindowsPlayer上已经带上了盾牌标志,说明打开此exe时会进行权限请求。

编译结果

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

替换exe

三、编译游戏

重启Unity,打包游戏。

可以看到,此时游戏已经有小盾牌需要申请管理员权限了。

结果