簡體   English   中英

C#->在Win7 / Vista上更新AppSettings.config文件

[英]C# -> Updating an AppSettings.config file on Win7/Vista

我在這里看不到任何內容,但我確實記得有人告訴過您,如果您希望應用程序更新配置文件,則該文件必須位於...下。

**C:\Users\Ibrar Mumtaz\AppData**

那里的某個地方,原因是用戶應該具有權限在此處而不是在應用程序安裝文件夾下更新配置文件。 這是我的印象,我可以肯定的是,確實如此。 我想我在這里= p

我的問題是,這里是否有人可以對此有所啟發,因為這是我要測試應用程序之前要實現的最后一個功能。

1)首先,需要安裝程序來設置文件夾,然后將我的應用程序配置文件放入其中。 我已經在使用visial studio安裝程序,因此我打包了我的應用程序,但是這一點讓我失望了嗎? 那我該怎么做呢? 我只需要有人演示如何執行此操作,就可以重新配置我的應用程序以查找配置文件的新位置。

2)我應該能夠弄清楚如何找到該文件夾​​並找到其中的配置文件。 一旦我知道安裝程序會將配置文件插入到用戶有權訪問的正確文件夾中,則應該從那里直接進行安裝。

謝謝閱讀。

更新:

這是非常直接的,因為VS Installer可以選擇添加一個特殊文件夾,因此剩下的就是以編程方式訪問該文件夾並讀寫配置文件。 一個問題? 我用來為我的應用程序創建配置文件的ConfigurationManager類期望我的配置文件在應用程序本地,而不是在本地FileSystem的完全不同的部分里嗎? Errr在這里幫助Plz嗎?

Ibrar

如果使用“ VS設置”文件創建應用程序設置鍵,並且具有用戶可能希望在運行時更改的值並保存其首選項,只需將這些設置的范圍設置為“用戶”,而不是“應用程序”即可。
這樣,您將擁有一個setter方法,可以編輯Settings.Default實例,完成后調用Save()方法將其持久化到磁盤。

該文件將保存在用戶的“ AppData”文件夾中,無論該文件在哪里,都位於某個神秘文件夾下。 但是您不必擔心大多數時間它的位置,因為它將在下一次執行時自動讀取,並在以后的運行中保持不變。

Afaik安裝程序可以用做事的類擴展。

在INSTALL動作上可能要做的是

var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                    "My app name");
if (!Directory.Exists(path)) Directory.CreateDirectory(path);

反之亦然。

我認為App.config文件與物理程序集的位置有關。

實際上,如果您的應用正在用戶的計算機上運行,​​它將擁有該用戶具有的任何權限。 因此,最有可能的是,您可以期望能夠在文件系統上的任何位置進行寫操作。

但是,用戶可能會在受限權限下運行,因此沒有權限。 因此,您可以只使用注冊表來存儲配置文件(安裝文件夾)的位置,然后在嘗試更新它時,如果它無法獲得權限,請要求用戶授予它。

或者您可以使用Windows標准文件夾,因為這樣做會同時將用戶數據與應用程序數據分開。

使用Environment.GetFolderPath()方法獲取應用程序中的“特殊文件夾”路徑。

http://www.programmersheaven.com/2/Les_CSharp_15_p2

http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

如果您要談論在項目“屬性”->“設置”選項卡上找到的應用程序設置,則有兩種不同類型的設置:用戶級和應用程序級。

如果您需要在運行時更改任何設置,則這些設置將是用戶級別的設置( http://msdn.microsoft.com/zh-cn/library/cftf714c.aspx ),所有更改都將埋在私有文件中的某個位置用戶個人資料中的文件夾。

如果要更新應用程序級別的設置,最好的選擇是在軟件安裝過程中執行此操作。 在這種情況下,您無需在應用程序文件夾中的任何位置查找配置文件(YourApp.exe.config)。 您更有可能需要在安裝程序包中創建某種安裝后事件處理程序,並運行某些腳本或其他應用程序,這將更新YourApp.exe.config中的數據。 安裝程序包中的所有內容都將以提升的特權執行,因此該配置文件將是可寫的。 順便說一句,如果用戶使用受限用戶帳戶類型特權,則此方案適用於2000和XP。

因為我從技術上沒有找到想要的答案,所以六個月后,我回到了我的應用程序,並設法產生了不會破壞我當前體系結構的解決方案。

如果要實現應用程序以利用ConfigurationManager提供的某些功能,則它將提供一個靜態方法,稱為:

ConfigurationManager.OpenMappedExeConfiguration(); // takes two arguements.

可以這樣使用:

        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = returnUsersAppDataFolderPath();

        Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

例如

fileMap.ExeConfigFileName = @"some file path external to your applications install folder."

請記住在前面使用'@'符號,以允許編譯器按原樣按原樣對待字符串。

如果配置文件可以方便地位於本地,則只需使用:

ConfigurationManager.OpenExeConfiguration(string exePath)

以上是您通常使用的內容,但對我來說,我需要將配置文件放置在用戶AppData文件夾下,因此第一個選項是我需要的。 它確實有效。

我希望這對其他人有幫助,因為我想將我的應用程序部署到Win7和Vista環境中,因此這個問題需要詢問我是否堅持使用ConfigurationManager,這是一個遺憾,最終選擇的方法從未真正脫穎而出首先=)。

如果您想從配置文件中讀取內容,請發表評論,我將向您展示如何做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM