扫一扫
关注微信公众号

Vista开发新特性之你的文件存在哪?2
2007-08-21   网络

当你的程序添加了UAC manifest的时候,那么同时也就丧失了Vista的这项兼容性保护;这个时候你必须在程序中使用正确的路径,把配置文件,日志文件等等都写入到用户自己的AppData中去。我们可以从下面的记事本演示中看到,由于记事本已经对Vista进行了升级,那么访问\program files\目录将会返回“没有权限”的错误信息: 


Vista开发新特性之你的文件存在哪?
“没有权限”

  如果我们比较一下EditPlus和记事本的exe文件,我们就可以看到区别了:  

Vista开发新特性之你的文件存在哪?
比较一下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目录中。其实我们可以简单的这样区分:

  \program files\application name:保存安装过程中固化的应用程序配置,这些配置不应被个别用户更改;比如:固定的网关,服务器地址,应用程序的动态链接库列表,程序版本信息等。

  \users\username\appdata:保存可以由用户修改的内容,并且这个配置文件应该是在应用程序第一次运行的时候由程序动态创建的。比如:窗口的位置,大小,上次登录的时间,用户名,cookie等等。

  为什么不能由安装程序创建这个文件呢?主要是为了支持无值守的部署情况,这种情况下安装程序无从知晓个别用户的具体情况;所以无法正确创建这个文件。

  其实,创建这个文件最简单的方式就是使用.net framework 中的Appl???$?icationBlock的Configuration模块,因为它会自动的处理文件的读写和创建;对应用程序是完全透明的。

热词搜索:

上一篇:Vista开发新特性之你的文件存在哪?1
下一篇:UNIX二十年发展经典回顾

分享到: 收藏