【问题标题】:Do you support standard users on Windows XP?是否支持 Windows XP 上的标准用户?
【发布时间】:2008-11-05 15:57:05
【问题描述】:

更新:由于开发机器已移至 Vista,我现在以标准用户身份自动测试。随着 XP 的淘汰,这个问题不再那么重要了。


自 Windows 2000 徽标要求以来,Microsoft 一直要求应用程序以标准用户身份运行。像其他人一样,我总是以管理用户身份运行我的桌面。和每个开发人员一样:我以管理用户身份登录、开发、运行和测试。

现在,随着最终支持标准用户的新推动,我一直在通过以普通用户身份运行它们来测试我的应用程序 - 通过 RunAs 或使用 [SaferCreateLevel][1]/[SaferComputeTokenFromLevel][2] 让我的应用程序以正常权限重新启动自身如果它检测到它正在以管理员身份运行。我很快就看到我的一些应用程序在 Windows XP 下作为标准用户失败了(由于我自己的愚蠢)。我还看到了相同的应用程序在 Vista 下是如何正常工作的(感谢它为我修复错误的大量垫片)。

旁白:具有讽刺意味的是,与 XP 相比,应用程序更有可能在 Vista 上作为标准用户运行。

问题是您是否测试您的应用程序的标准用户兼容性?您是否在 XP 上作为标准用户进行开发?您是否忽略标准用户访问并希望获得最好的结果?


作为奖励,我尝试让我的应用作为受限用户(而不是普通用户)重新启动。它甚至没有出现 - Windows 说它无法初始化。所以我有一个未来的研究领域:让应用程序甚至支持有限的用户。


我特别提到了 XP 而不是 Vista 上的标准用户,以强制执行 Vista 在兼容性方面与 XP 没有什么不同的事实。任何说他们的应用在 Vista 上失败的人都必须意识到它在 XP 上也失败了。

【问题讨论】:

  • 我是一名开发人员,而不是“像其他人一样”,除非我需要管理员权限(通常是为了安装某些东西,但很少),否则我不会以管理员权限运行。
  • “和其他人一样,我总是以管理员用户的身份运行我的桌面。”这正是这种假设,当你最不期待的时候它会失败。

标签: windows security


【解决方案1】:

我将向您介绍 Crispin Cowan 的“Best Practices for Developing for Windows Standard User”演讲。非常值得一看。

【讨论】:

    【解决方案2】:

    如果您想将您的应用程序出售给企业,那么是的,您必须测试您作为标准用户运行的应用程序。如果您的应用程序在没有管理权限的情况下无法运行,那么这将注定要出售给企业。

    即使在国内市场,也有很多人可以并且确实使用有限的用户来进行他们的日常活动;我知道我知道。

    即使是合法需要管理权限的管理应用程序,在作为受限用户运行时也应该表现得明智。他们应该弹出一个对话框,通知用户需要管理权限才能完成他们正在尝试的任何任务。

    构建遵守这些限制的软件的最佳方法是在具有有限权限的用户下开发您的软件。这样一来,每次开发功能时,您都在隐式测试它是否可以在有限的环境中工作。

    这些都不难,只是需要一定程度的纪律 - 就像所有质量保证程序一样。几十年来,人们一直在 *nix 上开发为非 root 用户。在这方面,Windows 开发落后了。

    【讨论】:

      【解决方案3】:

      Crispin,his PDC talk,提出了一个非常好的观点,这是我以前从未考虑过的。

      Google Chrome 以标准用户身份安装:它安装在每个用户的文件夹中,不需要 UAC 或 OTS 提示,而且一切都是用户友好的,因为安装非常简单。不幸的是,它安装在 per-user 文件夹中,用户可以在其中修改它。

      换一种说法:恶意软件可以修改Chrome exe。

      Chrome 现在将成为任何恶意软件的最大目标。如果某些恶意软件确实对其进行了修改,Chrome 现在会将您的用户名、密码和信用卡信息发送回您的基地,因为这就是 Chrome exe 所做的。

      这就是为什么您有时希望将应用程序安装到受保护的位置。


      编辑:整个微软的“Click Once”部署初始化都受到了威胁。

      【讨论】:

      • 我对允许大多数应用程序安装在用户帐户中的 OSX 安装程序系统也有同样的想法。在公司环境中,这总是很糟糕,因为您无法正确跟踪已安装的内容(以及已过时的内容!)。
      • 我使用的是“以管理员身份安装,以用户身份运行”模式。
      【解决方案4】:

      我几乎一直以受限用户的身份在 XP 上运行,并且是默认用户。 (在 Vista 上,我使用管理员帐户并依赖 UAC。)

      我是作为受限用户开发的。在 Java 和 Visual Studio 开发中,几乎没有什么比这更需要特权了。

      如果我需要在受限帐户下运行某些东西但具有管理权限,我会使用 MakeMeAdmin(重命名并调整为 ConsoleMeAdmin).bat 脚本来创建管理控制台会话。

      如果我真的需要成为管理员才能进行安装和首次运行,以便我的安全软件可以自我调节以允许网络访问(或不允许)新代码等,我将提升我的将用户帐户限制为管理员足够长的时间以完成所有操作,然后再次以受限用户身份重新启动帐户。除了 Windows 更新,我以受限用户的身份进行所有下载,然后在提升为管理员后离线安装。

      因为我只有一个没有 Active Directory 的小型工作组 LAN,所以唯一有用的帐户类型是 XP 上的管理员和受限用户。 (当我第一次开始使用 XP 时,我尝试了高级用户,但发现我可以不用它,我更喜欢它教给我的东西,而不是依赖于我构建的代码中的特殊权限。)

      [PS:我的 XP 系统默认启用了数据执行保护(硬件支持),你会惊讶于出现的结果。]

      【讨论】:

      • 他们都是很好的答案,但我最喜欢这个。
      【解决方案5】:

      在商业环境中,大多数用户都是标准的 windows 域用户。 忽略标准的用户合规性测试是一个非常糟糕的举动。 你会让每个必须安装你的应用程序的域管理员非常生气,他们会去参加你的比赛。

      【讨论】:

        【解决方案6】:

        恕我直言,以管理员帐户开发不仅没有必要,而且非常危险!假设您在开发时在 Internet 上检查了一些东西(想到了 stackoverflow)并且您发现了一些恶意软件 - 历史表明这比您想象的要容易得多,例如通过横幅。作为管理员,此恶意软件会感染您的计算机,您可能永远无法摆脱它。它甚至可能对您的所有开发工作构成威胁(想想工业间谍活动)!

        如果您必须以管理员身份运行/测试任何东西,请使用 runas 甚至更好的 虚拟机 - 这样您就可以使用具有定义行为的单独系统(很多Windows 软件的许多问题来自开发人员 PC 上的库当然,但在其他任何地方几乎都没有!)。在 Microsoft Virtual PC 和 VMWare Server(都是免费的)时代,虚拟化软件的高价甚至没有任何借口。

        几年前我开发了一些 Windows 应用程序,除了它们的安装程序之外,没有什么需要管理权限。运行时设置始终属于用户,而不属于机器。

        是的,我在家里也以普通用户的身份运行 Windows XP,我的家人(父母等)也是如此。有时,一个糟糕的软件需要对其安装文件夹的写入权限,但到今天,95% 的已安装应用程序开箱即用即可正常运行。

        【讨论】:

        • 并非所有开发者工具在没有管理员权限的情况下都能正常工作。
        【解决方案7】:

        是的,我们对此进行了测试。

        可能是最简单但被滥用最多的规则是,您不应执行任何需要对程序的安装文件夹进行写访问的操作。取而代之的是一个名为 Application Data 的特殊文件夹,用于存放此类内容。

        【讨论】:

          【解决方案8】:

          是的,我接受了一般建议,即如果应用程序作为受限用户在 XP 上运行正常,那么让您的应用程序在 Vista 上运行会容易得多。为了实现这一点,并知道以受限用户身份运行是否有任何问题,我使用了LUABuglight

          我一般不作为受限用户开发,只作为受限用户登录进行测试。

          需要管理员权限并写入自己的 Program Files 文件夹的程序数量惊人。老实说,我发现很少有程序可以作为受限用户正常运行,无论来自任何软件公司,无论大小。

          【讨论】:

          • 太真实了。我的孩子想要安装的软件几乎总是要求我以管理员身份安装并尝试设置保护措施,以便他们无需成为管理员即可运行它。多么痛苦!
          【解决方案9】:

          其他人觉得有趣的是,Windows 开发人员认为以管理员身份运行是正常的(显然),但 Linux 开发人员几乎从不以 root 身份运行?

          【讨论】:

          • 我所知道的大多数人都以管理员权限运行帐户,而不是管理员/root。不幸的是,在多年需要比默认用户更高的访问权限之后,这已成为惯例,现在这只是习惯。我希望这不会降级为操作系统的宗教战争。
          • 我也不同意。在不得不一遍又一遍地运行 sudo 之后,人们就放弃了。如果它能让我以受限帐户的身份运行,那就太好了,但只要它(短暂)需要 root 访问权限就会自动弹出一些东西。
          【解决方案10】:

          作为一个老 BOFH,我会对任何要求提升权限以使其客户端应用程序正常运行的人大发雷霆。这是不可能的,从 2001-2002 年左右我们从 Win9x 切换到 XP(原文如此)以来一直如此。

          作为一个新出生的开发人员,在 XP 上的每个人都是强制组策略的本地管理员,并且更改它似乎需要时间,而且没有人特别倾向于开始 - 我已经安装了 RunAsAdmin shim 将我降低为大多数任务(包括开发)的普通用户 - 就像在 Vista 中一样。如果您在 XP 上被困为本地管理员,建议您使用 ^^

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-06
            • 2019-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-16
            • 1970-01-01
            相关资源
            最近更新 更多