我正在编写Windows CLI应用程序,需要以管理员身份运行它。在C#中,我将此行添加到app.manifest:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
我如何在Rust中做到这一点?
答案 0 :(得分:3)
为时已晚,但仍要回答。 :-)
请查看winres
库。它包含以下示例:
以下清单将把exe品牌标记为请求管理员 特权。因此,每次执行时,Windows UAC对话框都会 出现。
let mut res = winres::WindowsResource::new(); res.set_manifest(r#" <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly> "#);
完整的示例已记录在案,并且可用here。
我一直在一个包含图标且需要管理员权限的项目中使用此库,其使用build.rs
的{{1}}托管在here中。查看生成的可执行文件:
HTH
答案 1 :(得分:1)
有一个open RFC #721 for manifest support in Rust。
除了讨论添加本机支持的方法外,这些帖子还包含使用链接器开关或其他工具的各种解决方法的链接。当前没有通过链接器开关的好方法。您必须将rustflags
选项放入Cargo config file中,并将参数通过rustc
传递到["-C", "link-args=/exoticlinkerswitch"]
。这显然不是很方便。
对于工具,您可以use mt.exe
from the Windows SDK to add a manifest to your program after it has been compiled。
请注意,Cargo当前尚无法自动执行构建后步骤。但是,有一个货运扩展名cargo-make
支持此类构建过程。您可以通过cargo install cargo-make
安装它。