2011-02-25 66 views
11

我的應用程序需要像大多數應用程序一樣存儲數據。該應用程序以前只用於XP中將其存儲在Program Files中的數據。現在我們的客戶正在轉向Windows 7,我不得不升級它,以便將數據存儲在新文件夾中。我選擇了ApplicationData文件夾,因爲我認爲我可以在不需要UAC的情況下訪問它。應用程序數據在Windows 7和Vista中的存儲位置

現在在一些Windows 7計算機上這很好,但在其他人對該文件夾的訪問失敗,可能是因爲權限,但當用管理員privelidges運行程序工作正常。

我使用錯誤的文件夾還是這些案例異常?無論哪種情況,這種事情的最佳做法是什麼?

我正在使用以下C#SpecialFolder來獲取AppData文件夾位置。

System.Environment.SpecialFolder.ApplicationData 

回答

10

System.Environment.SpecialFolder.ApplicationData是每個用戶和漫遊。這聽起來不像你想要的。您似乎需要機器範圍的設置,因此應該使用System.Environment.SpecialFolder.CommonApplicationData

因爲CommonApplicationData是所有用戶共享的,所以默認的訪問控制是有限的。默認情況下,標準用戶不能在此位置寫入。建議的做法是在安裝時創建一個CommonApplicationData的子文件夾,併爲其分配適當的寬容訪問控制設置。

+0

我需要UAC像'ApplicationData'一樣訪問'CommonApplicationData'嗎?這也不意味着數據在同一臺PC上的所有用戶之間共享嗎? – Chris 2011-02-25 12:01:13

+0

@Chris「這不就是說數據在同一臺PC上的所有用戶之間共享嗎?」嗯,是的,但你之前將它存儲在機器範圍內的'Program Files'中。 – 2011-02-25 20:17:02

2

大衛是對的。 據我所知,如果您通過ClickOnce或Installer部署您的應用程序,也會有一些差異:第一個允許比正常安裝程序少一部分權限。 我必須承認我不是那方面的專家。

當然,程序文件是最糟糕的地方存儲數據,即使從XP。

+0

你的意思是Program Files,ProgramData是NT6上常用的appdata文件夾的名字 – Anders 2011-02-25 12:32:03

+0

Ya!...我的腦袋壞了...謝謝安德斯! – 2011-02-25 13:12:54

相關問題