另外一個問題是如何在應用程序中正確的獲得這些目錄,其實也很簡單,使用Environment.GetFolderPath()這個方法,我們可以輕易的獲得我們需要的目錄:
正確的獲得這些目錄
上面的listView中使用了以下代碼進行填充:
foreach(System.Environment.SpecialFolder folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
...{
ListViewItem folderItem = new ListViewItem(
new string[]...{folder.ToString(), Environment.GetFolderPath(folder)});
listView1.Items.Add(folderItem);
}
這里對Environment.SpecialFolder這個枚舉類型進行了遍歷,提取出了系統所有的特殊路徑。其中值得注意:
Enviornment.SpecialFolder.ApplicationData:這個值會指向當前用戶的AppData中的Roaming目錄,這個目錄和local的唯一區別就是當你的AD中配置了漫游功能的時候,此目錄的內容會被保存在服務器上,并在用戶登錄其他計算機的時候預先部署。一般是在比較大的企業中為了提供更好的登錄環境才使用。
向下兼容xp文件系統
說到這里大家肯定有疑問,因為在xp上,用戶目錄的路徑是:
\Documents and Settings\,而不是\Users\,會覺得有問題,其實Vista在這一點上早就作了準備。
用戶目錄的路徑
在一個Vista的環境下輸入了xp的路徑,還是可以正常訪問這個xp風格的目錄???$?。其實這里Vista借用了一個在unix上使用多年的技術“文件系統鏈接”來實現這個功能。
用戶目錄的路徑
當你鍵入dir /a的時候,出現了很多叫做
所以,應用程序如果需要向下兼容的話,仍然應該使用xp風格的路徑;當然我這里指的是如果你一定需要寫明(hard code)這些路徑的話;可能的話,盡量使用Environment來得到正確的路徑
我們可以看到,實際上重啟管理器只是定義了一個API用來注冊應用程序,和一個系統消息來通知應用程序重啟;其他的工作都需要我們的開發人員來自己實現,這可能讓我們有點失望,但也是可以理解的,因為系統并不知道那些程序狀態是重要的,必須要恢復的;這些應該是開發人員的責任。
另外還有兩點很重要的內容,我們在實現重啟管理器的時候需要注意:
1)重啟管理器的API只有在Vista的kernel32.dll中才有,所以如果你的應用程序需要提供支持,那么必須在Vista上進行編譯;
2)為了保證我們的應用程序可以在xp及一下系統上正常運行,一定要在調用RegisterApplicationRestart之前檢查系統版本,比如使用Environment.OsVersion或者GetVersionEx API,只有當版本號大于6.0.6000的時候才進行調用,否則會造成崩潰。