.NET的哪些部分需要执行管理权限?

时间:2010-04-09 14:12:34

标签: .net windows-7 uac

框架的哪些部分要求用户不仅仅是标准用户?我问的原因是因为我正在尝试在迁移到Windows 7时编译现有应用程序的可能问题列表。

现在,我自己可以想到一些事情:

  • 写入Eventlog
  • 写入Current_User范围之外的注册表项
  • 获取环境变量
  • 等...

我真的想要一份更完整的清单,到目前为止,我还没有找到一个合适的资源,其中列出了所有这些东西。

请注意,我不是在寻找提升现有应用程序权限的方法(可以通过使用清单来完成),我只是在代码中识别可能导致问题的操作。

9 个答案:

答案 0 :(得分:8)

嗯,您的示例与Windows 7或.NET没有任何关系。实际上它们已经是“Designed for Windows NT 4.0”徽标要求的一部分。如果您以非管理员用户能够在NT,Win2k或XP上运行它的方式编写应用程序,它将在Vista / Win7上正常工作。

当您在x64系统上运行软件时还有另一个常见的缺陷(但这也不是Win7特有的,但对于Win2003 Server x64或Win XP x64也是如此):如果您使用的是本机32-位代码,如调用本机DLL或COM与进程内组件互操作),请确保选择“x86”作为Visual Studio项目设置中的平台目标,而不是“任何CPU”。否则,您的应用程序将作为64位进程运行,并且您不能在同一进程中混合使用32位和64位代码,因此您将遇到错误。

当然,因为它始终是最佳做法,请使用Environment.GetSpecialFolders而不是硬编码路径。

答案 1 :(得分:8)

将其视为“什么库调用”将导致您走错路。考虑写入文件的任何内容。如果该文件在Program Files(以及其他地方)下,则需要admin privs。如果它在AppData下,你就不会。相同的库调用,不同的结果。同意写入注册表 - HKLM你需要管理员,HKCU你不需要。写入事件日志通常是正常的,但创建事件源不是。等等。这不是关于你调用什么方法,而是关于传递给它的params(例如路径)。

答案 2 :(得分:3)

我不相信获取环境变量需要提升权限。至少我从来没有碰到它,是否真的存在这种情况?

答案 3 :(得分:2)

获取部分列表的一个地方是查看“本地组策略编辑器”,您可以在其中查看默认情况下仅向管理员分配的登录权限和权限。

答案 4 :(得分:2)

命名管道可能会导致问题。通常情况下这不是问题,但是命名管道的使用现在正在增加,WCF本身支持IPC传输。

答案 5 :(得分:2)

.Net框架中的任何内容都不需要管理权限。与用户级安全性有关的一切都由操作系统控制,是否需要管理员权限是操作系统配置的问题。因此,框架无法确定是否需要提升。

您应该考虑的不是“.Net框架中需要提升的内容?”,而是根据“我的应用程序使用哪些操作系统功能需要管理员提升默认配置”。正如@Marcus所说,“专为Windows NT 4.0设计”徽标要求是一个非常好的起点,可以确定应用程序应该避免哪些操作系统功能,如果它设计为以普通用户身份运行。

答案 6 :(得分:1)

您可以使用Application Verifier中的Luapriv检查来帮助您查找问题。此外Standard User Analyzer也可以为您提供帮助。

答案 7 :(得分:1)

如果我正确理解您的问题,Visual Studio可以为您计算...

只需转到项目的属性,单击“安全”选项卡,然后选中“启用ClickOnce安全设置”复选框。选择“这是部分信任应用程序”单选按钮,然后单击“计算权限”按钮。

VS会在应用程序要求的IO,注册表等每个权限旁边放置一个复选标记...

答案 8 :(得分:0)

我严重怀疑是否有办法获得需要提升权限的.NET调用的完整列表。

BTW写入事件日志不需要提升,但是创建事件日志源确实需要提升。

找出代码的哪些部分存在问题的最佳方法是在Win7上进行测试,看看有什么突破,但不是优雅但是能完成工作。如果你想为这个任务创建时间估计,那么你可能不得不花一两天时间浏览你的应用程序:在Win7上运行,看看有什么中断,记下它,评论/避免/禁用该部分,然后重复直到你认为你有足够的事情清单来解决。