2009-07-01 98 views
3

我們已經編寫了一個在XP中運行得很好的應用程序,但是對Vista和Windows 7有嚴重的遷移問題,可能是由於正在編寫用戶數據的地方。域兼容性:共享數據應該寫在哪裏?

用例如下: 單個用戶需要登錄到機器並使用它來獲取數據。主管用戶需要能夠查看個人用戶的肩膀並確認他們正在正確地執行工作。這些主管還需要檢查系統日誌以確保系統正常運行。

我們在XP中完成這些任務的方式是直接寫入C:\驅動器上的文件夾。也許這是不好的做法,也許不行,但基本上系統的所有用戶都需要能夠以共享數據的形式訪問這些數據。在該程序的某些安裝中,IT環境根本就不安全,並且計算機有一個用戶,然後每個用戶分別登錄到我們的程序。在其他程序安裝中,IT人員能夠勝任併爲不同用戶提供不同的登錄,但每個用戶仍然可以訪問C:並且每個用戶仍然可以根據需要檢查其他用戶。

在Vista/Windows 7中,所有更改。如果IT人員將所有內容鎖定到單個用戶,那麼這些用戶仍然需要共享這些公共數據,並且只是不允許將應用程序特定的配置參數和用戶列表寫入應用程序目錄。如果系統位於具有域的位置,則用戶不具有本地管理員權限,甚至安裝也可能是問題。

解決方案是讓安裝程序創建一個每個用戶都可以寫入的目錄,然後將所有用戶特定的數據放入該目錄中?如果是這樣,是否有可能讓安裝程序以這種方式行事(即使必須給予管理員權限)?或者有沒有辦法讓Vista/7以更自由的XP方式運行?

回答

1

最權威的資源是MSDN中每個windows版本的應用程序規範中的"Data and Settings Management。閱讀本文可以查看Windows上存在的各種特殊文件夾的基本原理,以及如何選擇將數據寫入哪一個文件夾。

接下來,您的應用程序需要使用SHGetSpecialFolderLocation API來檢索到特定位置的路徑。

,大多數likley提供您的需求文件夾 - 被一個用戶寫,管理員讀,會CSIDL_APPDATA - 這,在Windows 6.X,對應於C:\ProgramData\

默認的文件夾權限創建在這個位置完全控制管理員和所有者(即創建它的用戶),並且只讀取對Users組成員的訪問權限。

完全獨立的練習正在編寫修改目錄上的訪問控制列表(ACL)所需的代碼。如果您所選擇的地點的默認權利不足以滿足您的需要,這將是必要的。

0

我們在XP中完成這些任務的方式是直接寫入C:\驅動器上的文件夾。也許這是不好的做法,也許它不是

它絕對是。 'C:\ Users \ Public \ Public Documents'是適合的地方。使用NTFS ACL來控制誰可以讀取和寫入文件。

+0

因此,根據我們安裝在哪個操作系統,我們轉到該目錄或其他目錄XP?兩者有共同之處嗎? – mmr 2009-07-01 00:34:53

+0

我相信XP有一個類似的文件夾下的文件和設置 - 如果你想只有一個代碼路徑,我認爲%PUBLIC%環境變量將工作 – 2009-07-01 00:37:45

+0

%公衆%是vista新的,根據:http:// vistaonwindows.com/environment_variables.html – mmr 2009-07-01 00:38:55

0

默認情況下,沒有所有用戶都有寫入權限的目錄(除了系統範圍的TEMP目錄外,我不會去寫日誌信息)。

如果您的安裝程序是以管理權限運行的,它可以創建這樣一個目錄併爲每個人提供寫入權限。最合理的地方是ALLUSERSPROFILE(在XP上的C:\Documents and Settings\All Users,在Vista/7上的C:\Users\Public)。

另一個相當簡單的解決方案是讓每個用戶只需登錄到他或她的配置文件中的目錄,例如,登錄到Application Data\Your App。所有的日誌記錄信息仍然可以通過管理應用程序很容易地進行彙總,如果讀取權限未被鎖定,用戶甚至可以在需要時讀取彼此的數據。

1

您的應用的一部分可能可能作爲系統服務和其自己的用戶運行。這樣,它也可以擁有自己的安全存儲,遠離人類用戶。這也將消除首要的需求,讓用戶運行一個程序,使其權限超出其常規範圍。

應用程序的實際用戶空間部分可以連接到服務並執行簡單的存儲/檢索操作。

0

將數據存儲在網絡的某處不是更好嗎?這樣你只需要設置一次安全性,而且維護起來更容易。主管可以很容易地讀取許多電腦的數據,不必訪問個人電腦的...