此问题适用于Windows Vista!

我有一个应用程序,它通常在没有管理权限的情况下工作.有一个活动确实需要管理权限,但我不想用更高的权限启动应用程序本身,因为我知道大多数时候用户甚至不会使用该功能.

我正在考虑某种方法,通过这种方法,我可以在某些事件(例如按下按钮)上提升应用程序的权限.例子:

如果用户单击此按钮,则会提示用户UAC对话或同意.我该怎么做?

推荐答案

我认为提升当前运行的进程是不可能的.据我所知,Windows Vista内置了在启动时给予进程管理员权限.如果您查看使用UAC的各种程序,您应该会看到,每次需要执行管理操作时,它们实际上都会启动一个单独的进程(任务管理器是一个,Paint.NET是另一个,后者实际上是一个.NET应用程序).

这个问题的典型解决方案是在启动提升的进程时指定命令行参数(abatishchev的建议是这样做的一种方法),这样启动的进程只知道显示某个对话框,然后在该操作完成后退出.因此,用户几乎不应该注意到一个新进程已经启动,然后退出,而更愿意显示为同一应用程序中的一个新对话框已经打开(尤其是如果你进行了一些黑客攻击,使提升进程的主窗口成为父进程的子进程).如果提升访问不需要UI,那就更好了.

在Vista中,我们将对UAC进行全面的讨论,我建议您在这个主题上看到this very through article个(代码示例是C++),但我怀疑您无论如何都需要使用WiAPI和P/Unjk来完成C语言中的大部分内容.希望你现在至少看到了正确的方法,尽管设计一个符合UAC的程序绝非小事...

.net相关问答推荐

从没有流的EventStore中读取流不存在异常

WinForm Task.Wait :为什么它会阻塞 UI?

如何在 .net MAUI 中删除不需要编译的平台?

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

具有透明背景且包含不透明控件的 WPF 窗口

实体框架无法加载指定的元数据资源

为什么 WCF 中不允许方法重载?

Convert.ToBoolean 和 Boolean.Parse 不接受 0 和 1

寻找 .NET 的命令行参数解析器

关闭 Visual Studio 中所有选项卡但当前选项卡的键盘快捷键?

C#As的 VB.NET 类似功能

如何将 XPath 与 XElement 或 LINQ 一起使用?

如何使我的托管 NuGet 包支持 C++/CLI 项目?

无法加载文件或程序集System.ValueTuple

EF Core 添加迁移构建失败

如何使用 NPOI 读取文件

记录器包装器最佳实践

Roslyn 编译代码失败

如何在我的机器上找到 fuslogvw.exe?

嵌套捕获组如何在正则表达式中编号?