2011-07-15 67 views
2

我們創建了一個安裝程序(Nullsoft的安裝系統v2.46),其安裝應用程序,一些(嵌套)數據的目錄,其中包括讀/(文本)數據寫入文件從安裝的應用程序訪問。Nullsoft安裝程序,Win7,如何安裝讀/寫數據目錄?

一切正常,在WinXP:應用程序加載和文件可以讀/從安裝目錄下嵌套的數據目錄寫入。

但是,安裝在Win7/64上時,作爲安裝的一部分創建的數據目錄是隻讀的。因此,應用程序加載數據文件,但無法覆蓋它們(因爲它們駐留在安裝目錄下的只讀數據目錄中)。

是的,因爲這是Win7-64bit,數據目錄恰好位於:

C:\Program Files (x86)\MyApp\MyDataDir0 

據我瞭解,Win7的是比以前WinOSes(出於安全原因),它的安裝政策更加嚴格。

問題:我們應該使用什麼機制來確保這些數據目錄是可讀/寫的,並且在安裝過程中,它們中的(文本)數據文件也是可讀/寫的?

這些數據文件不是用戶特定的,它們意味着該程序運行所需的數據。 (沒有它們,程序是無用的。)邏輯上,它們是「程序系統」文件,雖然我們可以合理化它們代表程序使用的「可擴展數據集」(因此它們必須是讀/寫)。

爲了簡化和一致性,我們真的更願意用安裝程序解決這個問題,而不是在程序中改變目錄/文件權限。我們希望這些數據存在於應用程序的安裝位置,而不是某些C:/Users/Default/。或C:/ProgramData/MyApp/.目錄。

是我們的數據顯示目錄,下的應用程序安裝目錄對Win7的政策「讀/寫」的興趣? (我們是不是應該在那裏安裝它們?)

回答

2

如果您依賴寫入%ProgramFiles%,您的程序基本上在每個版本的WinNT上都被打破,您只是未能測試爲非管理員!

如果你想要讓大家寫訪問文件或文件夾,使用Access Control plugin。通過這樣做,你放棄了一點安全感。爲了降低風險,請確保數據文件存儲在一個子目錄(%ProgramFiles%\MyApp\Data或類似的東西)中,並且不要授予普通用戶對.exe或.dll文件夾的寫入權限。

你真的應該做的是複製文件從的%ProgramFiles%至%,當你的程序第一次運行,這樣每個用戶得到自己的設置,並沒有安全問題APPDATA%。

+0

感謝您的建議將其安裝到'的%ProgramFiles%',並複製到'%APPDATA%' - 我們討論和決定這樣做。 (有點奇怪,該程序在XP和Win7上查找文件的方式不同,但我想這就是生活......) – charley

1

實際上,您的應用程序無法在Windows XP下工作,其中用戶不是管理員。 Windows 7/Vista中Program Files目錄的默認權限與Windows XP中的相同。

從你的描述,這些文件沒有程序文件,而是程序的數據文件,因此最好將它們存儲在ProgramData目錄。要檢索其位置,請撥打SHGetFolderPath函數,並將CSIDL_COMMON_APPDATA作爲參數。但是,即使在這種情況下,您可能需要編輯您的應用程序文件夾權限以允許任何用戶進行書寫。

如果您仍然希望將文件存儲在Program Files中,那麼您唯一的選擇是在安裝過程中編輯數據文件夾的權限。

相關問題