浏览器之家


Vista开发新特性之你的文件存在哪?

其实这不能算是新特性,充其量算是一个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文件,我们就可以看到区别了:

评论

没安装畅言模块