允许本地管理员无需“以管理员身份运行”即可运行应用程序

3

我正在从事一个基于.NET的项目,其中有一些功能只想让管理员使用。控制访问这些功能的方法被装饰了PrincipalPermissionAttribute

[PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Administrators")]
public static void RunAdminFeature()
{
    // code here
}

我们的许多用户都是系统上的本地管理员,但我们发现他们仍然需要右键单击应用程序图标并选择“以管理员身份运行”选项,才能使用这些功能。
根据此处的问题和答案,似乎这是Windows 7上的预期行为。如果是这样,那么修改应用程序快捷方式如此处所述可能是预期的解决方案。如果是这样,那就这样吧。
我的问题有两个。
1.在编程方面我做得对吗?属性方法是正确的方法吗? 2.是否有编程手段可以实现对某些功能的限制访问,同时还允许本地管理员运行应用程序而不需要显式地“以管理员身份运行”?

这是一个好问题,我自己也在各种论坛上问过(现在正在尝试找到这些链接)。据我回忆(正如你所指出的),要求用户修改快捷方式绝对是解决此问题的一种方法。然而,还有另一种方法,这取决于您使用的安装包是哪个?我没有看到过属性方法的使用,但很想听听您是否成功了。对于第二点,我的回答是否定的,没有讨论。经过研究,我没有找到适合做这件事的方法。注册UAC是你能做的全部... - MoonKnight
@Killercam,属性方法似乎可行,尽管我们没有在代码中正确限制访问。例如,如果本地管理员在没有“以管理员身份运行”的情况下运行我们的应用程序,则仍然(不幸的是)可以从UI访问功能,但在这种情况下功能无法正常工作。据我所知,普通用户一直遇到这种情况。一旦本地管理员“以管理员身份运行”,这些功能就会按预期工作。至于安装程序,我们使用InstallShield,但我认为我们没有做任何与此问题相关的特殊处理。 - Matt Davis
修改应用程序快捷方式是正确的答案。 - Jim Mischel
@JimMischel 我不同意,我认为自我提升是更好的方法,正如Sheng Jiang的回答所述。 - Rowland Shaw
1个回答

1

1 属性方法是可行的。你只需要正确处理安全异常(例如,提供以管理员身份重新启动应用程序的选项)。

2 在你的应用程序中隐藏管理员界面,以便普通用户可以使用,除非你在某个地方添加了一个“上帝模式”按钮来启用升级模式下的管理员界面。Windows任务管理器需要提升权限才能查看所有用户的进程,这是一个例子。

有关自我提升的示例代码,请访问如何在UAC下将应用程序自我提升到高权限级别


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接