2008-11-17 97 views
1

我正在嘗試編寫可在Windows Vista和XP上運行的安裝程序(通過創建.vdproj)。我唯一發現的是,當我嘗試在Vista上運行它時,我在安裝程序中包含的文件安裝了用戶組的只讀權限。這是一個問題,因爲應用程序需要從這些文件讀取/寫入。我能夠實現它的唯一方法是「以管理員身份運行」或實際更改權限。有誰知道如何讓這些文件對任何人開放?謝謝。使用.NET安裝程序的Windows Vista上的文件安全

回答

6

Program Files文件夾及其內容僅供標準用戶閱讀。這是設計的,你會發現這也是Windows XP的情況。這只是在Windows XP上,很多人隨時都有管理員權限運行,你可能會逃避它。如果您想要將您的應用分配到商業環境中,您很快就會發現它在那裏也無法在XP上運行。

如果標準用戶需要寫入權限,解決方法是不要將文件放置在程序的可執行文件夾中。將它們放在Application Data文件夾中。對於大多數的XP機器,這將是在這裏:
C:\ Documents和Settings \所有用戶\應用數據\你的應用程序

然而,情況並不總是這樣的情況,它是在Vista上有些不同,無論如何,所以請確保您通過編程環境提供的機制獲得該路徑。在.Net中,您可以使用Environment.GetFolderPath()函數。

+0

什麼是.NET應用程序提供的「機制」? – skb 2008-11-18 04:38:22

+0

喬爾,文件夾.. \所有用戶\應用程序也是隻讀標準用戶。建議在安裝時添加一個可寫的子文件夾。 – RoadWarrior 2008-11-19 21:16:18

1

要添加一些細節喬爾的回答是:

  • 在Win2K和XP,CSIDL_APPDATA應該用於每個用戶,漫遊。在Vista中,這是FOLDERID_RoamingAppData。

  • 在Win2K和XP中,CSIDL_LOCAL_APPDATA應該用於每用戶,非漫遊。在Vista中,這是FOLDERID_LocalAppData。

  • 在Win2K和XP,CSIDL_COMMON_APPDATA應該用於每臺機器,即一個應用的所有用戶。在Vista中,這是FOLDERID_ProgramData。

注意:這最後一個文件夾通常只讀給非管理非電源用戶。推薦的解決方案是在應用程序安裝期間創建一個讀/寫子文件夾。

編輯:爲了獲得這些常量的使用託管代碼的特定機器上的實際位置,儘量System.Environment.GetFolderPath與定義here的常量。另一個有用的鏈接是here

相關問題