Vista开发新特性之你的文件存在哪?
2008-04-09 04:06:16来源:互联网 阅读 ()
作者: 徐磊 出处: 天极Yesky软件频道
其实这不能算是新特性,充其量算是一个Vista开发最佳实践,但是由于种种原因;基本上所有需要进行Vista兼容性升级的软件产品都会遇到这个问题,究其原因当然有历史因素,但是归根到底还是我们的开发不够规范。
先扯远一点,软件开发需要的到底是创新还是规范?我见过很多刚刚毕业的,还有仍然在校的学生把随意当成创新,把出轨作为炫耀。当我刚刚加入SSW的时候,对公司最大的不适应就是繁多而且详细的各项规范http://www.ssw.com.au/ssw/standards,上班的第一个月我收到最多的邮件都是提醒我哪里又违反了哪条规范;但是当我工作了1年以后,我发现这许许多多的标准已经成为了一种习惯,并且在帮我更快更好的完成我的日常工作。曾经听过这样的话“优秀是一种习惯”,当你吸取了其他人的经验,并在每天都不知不觉的使用这些经验的时候,那么你会发现做事的效率会大大的提高,并且一切都那么自然。当然,学习规范的过程是痛苦的,但总归是有收获的。回到软件开发的话题上来,我一直觉得学习编程最好的方式,就是把别人的代码自己从新写一边,编译并运行。记得上学的时候学习c语言就是这样,当我吧谭浩强老师的所有代码都自己编译了一遍以后,我发现其实编程是那么简单。这样的习惯一直跟随我学习php,sql,java,.net等任何的新技术。
不好意思,扯得太远了一点。Vista中的一项重大改进就是UAC的广泛应用,当我们无法使用管理员权限的时候,我们发现很多以前很简单的操作变得如此的复杂。比如:我们都习惯于把应用程序的配置文件存放在\Program Files\Application Name\这样的文件夹中。这样的位置到了Vista上,你会发现普通用户/管理员都无法在不提升权限的情况下写入,导致应用程序的崩溃。当然,如果你的程序还没有添加UAC manifest的话,这一切都不是问题。
文件系统虚拟重定向 File System Visualization
关于这一点,我们可以从下面的实验中发现其中的缘由:
首先使用EditPlus这个工具创建一个文本文件并存放到\Program Files\目录下:
创建一个文本文件
你会发现程序不会遇到任何问题,文件可以正常存储,但是当你使用文件管理器打开\Program Files\目录的时候,文件却不存在。
文件却不存在
实际的文件其实是被“重新定向”到了当前用户的AppData目录之下:
其实,这是Vista中向下兼容的一项功能:文件系统虚拟重定向 (File System Visualization)。其功能就是针对那些还没有兼容Vista的应用程序,把那些对受保护内容的访问从新定向到用户具备访问权限的位置,也就是\Users\UserName\AppData\Local\VirualStore\。在这个文件夹中你可以找到象Program Files, Windows这样的目录;因为普通用户默认情况下没有对这些目录的访问权限,所以相应的访问被定向到了这里。
相应的访问被定向
当你的程序添加了UAC manifest的时候,那么同时也就丧失了Vista的这项兼容性保护;这个时候你必须在程序中使用正确的路径,把配置文件,日志文件等等都写入到用户自己的AppData中去。我们可以从下面的记事本演示中看到,由于记事本已经对Vista进行了升级,那么访问\program files\目录将会返回“没有权限”的错误信息:
“没有权限”
如果我们比较一下EditPlus和记事本的exe文件,我们就可以看到区别了:
比较一下EditPlus和记事本的exe文件
我们会发现记事本exe文件的manifest中多了以下代码:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
以上代码告诉Vista上的UAC,记事本现在使用asInvoker的权限,也就是和调用者同样的权限;我在专门介绍UAC的文章中提到过,Vista上的用户默认是标准用户,没有访问\program files\的权限,这就是为什么记事本会保存失败。
多用户应用环境
从Windows开始支持多用户开始,其实就已经有了用户目录的概念,但是我们一直都没有在软件开发中对这个问题作足够多的重视,造成了很多的应用程序都把一些用户自己的配置内容写入到了\program files\application name目录中。这个问题有很多人不理解,到底那些内容是应该保存在\program files\application name目录中,那些应该保存到\users\username\appdata目录中。其实我们可以简单的这样区分:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash