“沒有權限”
如果我們比較一下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目錄中。其實我們可以簡單的這樣區分:
\program files\application name:保存安裝過程中固化的應用程序配置,這些配置不應被個別用戶更改;比如:固定的網關,服務器地址,應用程序的動態鏈接庫列表,程序版本信息等。
\users\username\appdata:保存可以由用戶修改的內容,并且這個配置文件應該是在應用程序第一次運行的時候由程序動態創建的。比如:窗口的位置,大小,上次登錄的時間,用戶名,cookie等等。
為什么不能由安裝程序創建這個文件呢?主要是為了支持無值守的部署情況,這種情況下安裝程序無從知曉個別用戶的具體情況;所以無法正確創建這個文件。
其實,創建這個文件最簡單的方式就是使用.net framework 中的Appl???$?icationBlock的Configuration模塊,因為它會自動的處理文件的讀寫和創建;對應用程序是完全透明的。