“沒(méi)有權(quán)限”
如果我們比較一下EditPlus和記事本的exe文件,我們就可以看到區(qū)別了:
比較一下EditPlus和記事本的exe文件
我們會(huì)發(fā)現(xiàn)記事本exe文件的manifest中多了以下代碼:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
以上代碼告訴Vista上的UAC,記事本現(xiàn)在使用asInvoker的權(quán)限,也就是和調(diào)用者同樣的權(quán)限;我在專門介紹UAC的文章中提到過(guò),Vista上的用戶默認(rèn)是標(biāo)準(zhǔn)用戶,沒(méi)有訪問(wèn)\program files\的權(quán)限,這就是為什么記事本會(huì)保存失敗。
多用戶應(yīng)用環(huán)境
從Windows開(kāi)始支持多用戶開(kāi)始,其實(shí)就已經(jīng)有了用戶目錄的概念,但是我們一直都沒(méi)有在軟件開(kāi)發(fā)中對(duì)這個(gè)問(wèn)題作足夠多的重視,造成了很多的應(yīng)用程序都把一些用戶自己的配置內(nèi)容寫入到了\program files\application name目錄中。這個(gè)問(wèn)題有很多人不理解,到底那些內(nèi)容是應(yīng)該保存在\program files\application name目錄中,那些應(yīng)該保存到\users\username\appdata目錄中。其實(shí)我們可以簡(jiǎn)單的這樣區(qū)分:
\program files\application name:保存安裝過(guò)程中固化的應(yīng)用程序配置,這些配置不應(yīng)被個(gè)別用戶更改;比如:固定的網(wǎng)關(guān),服務(wù)器地址,應(yīng)用程序的動(dòng)態(tài)鏈接庫(kù)列表,程序版本信息等。
\users\username\appdata:保存可以由用戶修改的內(nèi)容,并且這個(gè)配置文件應(yīng)該是在應(yīng)用程序第一次運(yùn)行的時(shí)候由程序動(dòng)態(tài)創(chuàng)建的。比如:窗口的位置,大小,上次登錄的時(shí)間,用戶名,cookie等等。
為什么不能由安裝程序創(chuàng)建這個(gè)文件呢?主要是為了支持無(wú)值守的部署情況,這種情況下安裝程序無(wú)從知曉個(gè)別用戶的具體情況;所以無(wú)法正確創(chuàng)建這個(gè)文件。
其實(shí),創(chuàng)建這個(gè)文件最簡(jiǎn)單的方式就是使用.net framework 中的Appl???$?icationBlock的Configuration模塊,因?yàn)樗鼤?huì)自動(dòng)的處理文件的讀寫和創(chuàng)建;對(duì)應(yīng)用程序是完全透明的。