框架的哪些部分要求用户不仅仅是标准用户?我问的原因是因为我正在尝试在迁移到Windows 7时编译现有应用程序的可能问题列表。
现在,我自己可以想到一些事情:
我真的想要一份更完整的清单,到目前为止,我还没有找到一个合适的资源,其中列出了所有这些东西。
请注意,我不是在寻找提升现有应用程序权限的方法(可以通过使用清单来完成),我只是在代码中识别可能导致问题的操作。
答案 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上运行,看看有什么中断,记下它,评论/避免/禁用该部分,然后重复直到你认为你有足够的事情清单来解决。