更新:由于开发机器已移至Vista,我现在自动作为标准用户进行测试.随着XP逐步淘汰,这个问题不再那么相关了.
自Windows 2000徽标要求以来,Microsoft一直要求应用程序作为标准用户运行.像其他人一样,我总是以管理用户的身份运行我的桌面.和每个开发人员一样:我以管理用户身份登录,开发,运行和测试.
现在,随着最终支持标准用户的新推动,我一直在测试我的应用程序,通过以普通用户身份运行它们 - 或者通过RunAs,或者让我的应用程序使用[SaferCreateLevel][1]
/ 重新启动自身,[SaferComputeTokenFromLevel][2]
如果它检测到它以管理员身份运行.我很快就看到我的一些应用程序在Windows XP下作为标准用户失败的原因(由于我自己的愚蠢).我也看到相同的应用程序如何在Vista下运行良好(感谢它为我修复我的错误的众多垫片).
除此之外:具有讽刺意味的是,作为标准用户,应用程序更有可能在Vista上运行.
问题是您是否测试应用程序的标准用户兼容性?您是否在XP上作为标准用户开发?您是否忽略标准用户访问并希望获得最佳效果?
作为奖励,我尝试让我的应用程序重新启动为有限用户(而不是普通用户).它甚至没有出现--Windows说它无法初始化.因此,我的未来研究领域:使应用程序甚至支持有限的用户.
我特别提到XP上的标准用户而不是Vista,以强制执行Vista与兼容性有关的事实.任何人说他们的应用程序在Vista上失败都必须意识到它在XP上也失败了.
我将向您介绍Crispin Cowan的" 为Windows标准用户开发的最佳实践 "演讲.这非常值得一看.
如果您想将应用程序出售给企业,那么您 必须测试以标准用户身份运行的应用程序.如果您的应用程序无法在没有管理权限的情况下运行,那么这将导致任何销售业务失败.
即使在国内市场,也有很多人能够并且确实使用有限的用户来进行日常活动; 我知道我这样做.
即使是在需要管理方面需要管理权限的管理应用程序,在作为受限用户运行时也应该表现得理智.他们应该弹出一个对话框,通知用户需要管理权限来完成他们正在尝试的任何任务.
构建尊重这些限制的软件的最佳方法是在具有有限权限的用户下开发软件.这样,每次开发功能时,您都会隐式测试它是否可以在有限的环境中工作.
这一切都不是很难,只需要一定程度的纪律 - 就像所有质量保证程序一样.几十年来,人们一直在*nix上作为非root用户开发.Windows开发在这方面落后于曲线.
克里斯平在他的PDC谈话中提出了一个非常好的观点,一个我以前从未考虑过的观点.
Google Chrome以标准用户身份安装:它安装在每个用户文件夹中,无需UAC或OTS提示,并且一切都是用户友好的,因为安装非常简单.不幸的是,它安装在每用户文件夹中,用户可以在其中修改它.
换句话说:恶意软件可以修改Chrome exe.
Chrome现在将成为任何恶意软件的最大目标.如果某些恶意软件确实对其进行了修改,那么Chrome现在会将您的用户名,密码和信用卡信息发送回家庭基础,因为这就是新 Chrome操作系统的功能.
这就是您有时希望将应用程序安装到受保护位置的原因
编辑:整个Microsoft" Click Once "部署inititave遭受危险.
在商业环境中,大多数用户是标准的Windows域用户.忽略标准用户合规性测试是一个非常糟糕的举措.并且您将让每个必须安装您的应用程序的域管理员非常生气,他们将参加您的竞争.
我作为一个有限的用户几乎一直在XP上运行并作为默认值.(在Vista上,我使用管理员帐户并依赖UAC.)
我是一个有限的用户.Java和Visual Studio开发中几乎没有什么需要更多的权限.
如果我需要在有限帐户下运行但具有管理权限,我使用MakeMeAdmin(重命名并调整为ConsoleMeAdmin).bat脚本来创建管理控制台会话.
如果我真的需要成为管理员才能进行安装并进行首次运行,那么我的安全软件可以自行调整以允许网络访问新代码(或不运行)等,我将提升我的受限用户帐户管理员足够长时间完成所有这些操作,然后再次以受限用户身份重新启动帐户.除了Windows更新,我作为受限用户执行所有下载,然后在提升后离线安装到管理员.
因为我只有一个没有Active Directory的小型工作组LAN,所以唯一有用的帐户类型是XP上的Administrator和Limited User.(当我第一次开始使用XP时,我尝试过高级用户,但发现我可以不使用它而且我更喜欢教我不依赖于我构建的代码中的特殊权限.)
[PS:我的XP系统上默认也有数据执行保护(硬件支持),你会惊讶于这一点.