在網上有很多人問到settings檔案存放的位置,本人看了一些文章都沒有給出明確的答案,所以讓我們一起來追蹤settings 檔案到底存放在什麼位置,它是否存在加密保護。
settings 為設定檔案,其功能類似於app.config 檔案,但相比app.config settings 結構相對簡單,它只有名稱、類型、範圍、值四個屬性,並且不能更改結構(當然是在一般情況下,如要修改結構可以通過其它的方式)
我們都知道app.config 檔案在產生或debug後都會儲存在相對的目錄下\應用檔案名稱.exe.config(視窗程序)
問題來了,項目中的 pro.settings 編譯後卻找不到對應的檔案。
在程式碼中修改設定的內容。代碼如下:
view plaincopy to clipboardprint?
- LoginSet.Default.IsSaveLog = true;
- LoginSet.Default.LogName = "testUser";
- LoginSet.Default.LogPassWord = "test";
- LoginSet.Default.IpAddress = "127.0.0.1";
- LoginSet.Default.Save();
LoginSet.Default.IsSaveLog = true;<br /> LoginSet.Default.LogName = "testUser";<br /> LoginSet.Default.LogPassWord = "test";<br /> LoginSet.Default.IpAddress = "127.0.0.1";<br /> LoginSet.Default.Save();
在程式中修改了事先定義的幾個測試值, 關掉程式後,重新啟動設定值確實更改成功,那就表明 settings 是存放在磁碟上的。
開始尋找它的位置->
可以肯定settings檔案的存放沒有在執行程式的目錄下,所以估計是儲存在系統硬碟的臨時目錄下。
做一次簡單測試: 將執行程式拷貝一個副本到其它目錄 再執行發現原來的設定值回到了初始狀態,這就表明和應用程式的路徑有關係, 並且副本程式,與原程式的settings 設定檔案沒有衝突,可獨立使用。
行蹤發現了,在系統硬碟的 C:\Documents and Settings 目錄下 尋找你的執行程式檔案名稱後 發現了這樣一個檔案,user.Config
開啟檔案內容如下:
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="utf-8"?>
- <configuration>
- <userSettings>
- <Test.LoginSet>
- <setting name="IsSaveLog" serializeAs="String">
- <value>True</value>
- </setting>
- <setting name="LogName" serializeAs="String">
- <value>testName</value>
- </setting>
- <setting name="LogPassWord" serializeAs="String">
- <value>apace</value>
- </setting>
- <setting name="IpAddress" serializeAs="String">
- <value>127.0.0.1</value>
- </setting>
- </Test.LoginSet>
- </userSettings>
- </configuration>
<?xml version="1.0" encoding="utf-8"?><br /><configuration><br /> <userSettings><br /> <Test.LoginSet><br /> <setting name="IsSaveLog" serializeAs="String"><br /> <value>True</value><br /> </setting><br /> <setting name="LogName" serializeAs="String"><br /> <value>testName</value><br /> </setting><br /> <setting name="LogPassWord" serializeAs="String"><br /> <value>apace</value><br /> </setting><br /> <setting name="IpAddress" serializeAs="String"><br /> <value>127.0.0.1</value><br /> </setting><br /> </Test.LoginSet><br /> </userSettings><br /></configuration>
找到了這正是我們需要尋找的檔案。
總結: 該檔案的發現 得到一個結論,.Net
程式運行時都會拷貝一個副本到目前使用者的臨時目錄下,零時目錄名是不確定的,但前部分可以確定,本人預設目錄是:C:\Documents and
Settings\Administrator\Local Settings\Application
Data\????\test.exe_Url_hgfoy0r3bz1vyaqbme2dl1uefmet0wso\1.0.0.0
C:\Documents and Settings\Administrator\Local Settings\Application Data\ 這個是固定的,但會根據 不同使用者 Administrator有所變化
???? 是本人的系統版本
test.exe 應用程式名稱
Url_hgfoy0r3bz1vyaqbme2dl1uefmet0wso 這串代碼是根據你應用程式產生的MD5碼值
1.0.0.0 為程式版本號碼