我正在编写一个 Windows CLI 应用程序,我需要以管理员身份运行它。在 C# 中,我会将这一行添加到 app.manifest:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)
我如何在 Rust 中做到这一点?
太晚了,但还是要回答。:-)
请到winres图书馆看看。它包含以下示例:
以下清单将 exe 标记为请求管理员权限。因此,每次执行时,都会出现一个 Windows UAC 对话框。
Run Code Online (Sandbox Code Playgroud)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> "#);
完整示例在此处记录并可用。
我一直在一个包含图标并需要管理员权限的项目中使用这个库,它的build.rs使用winres托管在这里。查看生成的可执行文件:
HTH
有一个开放的 RFC #721 用于 Rust 中的清单支持。
除了讨论添加本机支持的方法之外,这些帖子还包含使用链接器开关或其他工具的各种解决方法的链接。目前还没有好的方法来传递链接器开关;您必须将一个rustflags选项放入Cargo 配置文件中,并将参数传递给rustc如下所示:["-C", "link-args=/exoticlinkerswitch"]。这显然不太便携。
对于工具,您可以使用mt.exeWindows SDK 在编译程序后将清单添加到您的程序中。
请注意,Cargo 目前无法自动执行构建后步骤。但是,有一个 Cargo 扩展cargo-make支持此类构建过程。您可以通过安装它cargo install cargo-make。