2010-02-19 22 views
4

我有一個C++ MFC應用程序,它將其系統範圍的所有配置設置存儲到註冊表中。以前,我們使用的.ini文件,並切換到使用註冊表幾年前使用存在軟件配置設置的Windows註冊表的其他替代品

SetRegistryKey("MyCompanyName"); 

我們現在得到有困難,從PC和Windows版本遷移到另一個用戶經常支持的電話,我來得出的結論是使用註冊表會導致比解決問題更多的問題。我不是特別想回到.INI文件,因爲我想爲每個用戶存儲設置,所以計劃是編寫我自己的GetProfile ...和SetProfile ...函數以使用數據庫。任何人都已經這樣做了,並且沒有人知道註冊表使用中的替換庫存在的現有拖放,這將不需要太多的代碼修改?理想情況下,我還希望它有選項可以從註冊表中讀取初始值以支持現有用戶。

+1

您正試圖通過切換到數據庫來減少支持呼叫嗎?你曾經支持過嗎? – 2010-02-19 15:43:09

+1

不夠公平,可能是一個簡單的XML文件就足夠了,而不是數據庫 – 2010-02-19 16:52:34

回答

3

我建議移動到與可執行文件相同位置的XML文件。一個好處是XML可以跨非Windows機器(甚至在Windows版本之間)移植。

編輯:在相同的位置作爲可執行的XML配置文件背後的想法是,在配置文件是用於程序的配置(不是用戶)和封裝/數據隱藏(不污染全局文件系統目錄) 。用戶配置數據應位於用戶或用戶選擇的目錄中的另一個文件中。

+0

這非常符合我目前的想法,無論是XML和EXE文件夾。我很驚訝那裏已經沒有東西了,儘管谷歌並沒有表現出很大的興趣。 – 2010-02-19 15:47:12

+9

-1除非您的應用程序不會安裝到Program Files目錄,否則您將遇到編寫XML文件時的權限問題。 Windows非管理員帳戶以及啓用UAC塊寫入Program Files的安裝。配置文件應該位於用戶的應用程序數據目錄中。 – 2010-02-19 15:59:38

+0

如果它與可執行文件位於同一位置,則它僅存在於單個實例中。當然,你可以將所有用戶設置存儲在單個文件中(並且在XML中處理這個比在INI中處理起來更容易)...仍然不是理想的恕我直言。 – 2010-02-19 16:08:56

3

雖然你可以爲每個用戶存儲一個單獨的INI文件 - 儘管我不知道這是否被WinAPI直接支持。至少有很多應用程序可以這樣做(例如TotalCommander)。

更新:顯然它是由API支持的。

+7

他可以通過使用用戶特定的設置目錄來完成。與在XP中一樣:C:\ Docs and Settings \ \ Application Data \ \ ... – 2010-02-19 15:28:05

+0

特別是因爲已經有一個API調用來獲取用戶的AppData文件夾路徑,所以... – 2010-02-19 15:33:42

+0

是的,這就是我的想法。 – 2010-02-19 16:03:39

1

您可以切換到存儲在用戶的應用程序數據文件夾中的XML/INI配置文件,或者甚至可能切換到My Documents文件夾。這樣用戶可以複製文件以保留其設置。

4

Boost有一個名爲Boost.PropertyTree的庫,它將設置抽象爲層次結構。它可以序列化爲多種格式,如XML,JSON和INI。

將這些文件存儲在%APPDATA%。將它們與可執行文件存儲在同一目錄中不是一個好主意,因爲%PROGRAMFILES%不能由XP上的常規用戶寫入。

+0

這將是我的解決方案,除了Boost.PropertyTree使用RapidXML,它不處理UTF-8 XML文件。如果它使用pugixml,那麼一切都會很好! – 2011-04-06 23:44:49

1

我停止在我的上一個桌面應用程序項目中使用註冊表,並使用存儲在用戶的%APPDATA%文件夾中的INI文件代替。如果你只存儲字符串和整數,那麼INI文件可以完成這項工作,並且很容易在記事本中編輯。

相關問題