Properties.Settings.Default nerede saklanır?


145

Bunu bildiğimi sanıyordum, ama bugün yanlış olduğumu kanıtladım - tekrar.

VS2008, .NET 3.5 ve C # çalıştırılıyor. Kullanıcı ayarlarını Özellikler ayarları sekmesine varsayılan değerlerle ekledim, sonra bu kodu kullanarak okuyun:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

Daha sonra, kullanıcı seçenekler iletişim kutusundaki değeri düzenledikten sonra şöyle kaydederim:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

Sorum şu, bu yeni değer nereye kaydediliyor? yürütülebilir dizindeki MyApp.exe.config dosyası güncellenmez, yine de varsayılan değerleri içerir. Artı, anlayabildiğim kadarıyla, bu dizindeki diğer dosyaların hiçbiri güncellenmez! Ancak, program değeri tekrar okuduğunda, değiştirilen değeri alır, bu yüzden bir yere kaydedildiğini biliyorum ...

Bu sadece akademik değil, bu sabah değeri manuel olarak düzenleyebilmem gerekiyordu ve değişen bir şey bulamadığım zaman kendimi güldüm.


2
Depolama konumunun çerçevenin veya işletim sisteminin farklı sürümleri arasında değişebileceğini unutmamak önemlidir. Depolama konumuna programlı hiçbir şeyi kodlamayın.
Greg D

Visual studio'daysanız, yeni bir uygulama geliştiriyorsanız, AppData \ Local \ Microsoft \ UYGULAMA ADINIZI kontrol edin Dosya adı user.config'dir. Windows
7'deyim

veya AppData \ Local altında
KansaiRobot

Bununla uğraştığım bir şey beni bu soruya ve başkalarına yönlendirdi: user.config, appsSettings.Save (); denir. (burada applicationSettings tanımlanır ApplicationSettings applicationSettings = new ApplicationSettings (this);).
amalgamate

Yanıtlar:


143

Windows'un daha yeni sürümleriyle çalışmak için, Program Dosyaları klasörüne varsayılan olarak yalnızca okuma erişimine izin verme politikası (UAC ile yükseltme istemediğiniz sürece, ancak bu başka bir konudur ...), uygulamanızın %userprofile%\appdata\localveya altında bir ayarlar klasörü olacaktır. %userprofile%\Local Settings\Application Datahangi Windows sürümünün kullanıldığına bağlı olarak, kullanıcıya özgü ayarlar için. Ayarları tüm kullanıcılar için saklarsanız, tüm kullanıcı profilleri altındaki C:\usersveya altındaki ilgili klasörde olurlar C:\Documents and Settings(ör:) C:\users\public\appdata\local.


3
Ayrıca, yürütülebilir dosyanın klasöründe sona eren Visual Studio'da oluşturulan .config, yalnızca hata ayıklama için kullanıldığını düşünüyorum. Son uygulamayı paketlerken, kullanıcı uygulamayı ilk kez çalıştırdığı için bu .config dosyasını eklemezsiniz.
Eddins

11
Daha yeni sürümler? Windows 2000'den beri durum böyledir. Yönetici olarak çalıştığınız için bununla başa çıktınız.
Joel Coehoorn

1
@Joel Coehoorn: Doğru, ancak şimdi Windows Vista ve sonraki sürümlerde yönetici hesabında, varsayılan olarak bir UAC yükseltme istemi olmadan Program Dosyalarına yazma erişimi alamıyorsunuz. Değişen politika budur. :)
Jason

2
Klasörün her sürüm yükseltmesiyle değiştiğine dikkat edilmelidir - bu nedenle, yazılımı her güncellediğinizde kullanıcı tercihlerini kaybeder.
Ian Boyd

17
Aslında hayır. Bir ayar oluşturmanız, "UpgradeNeeded" gibi bir ad vermeniz ve varsayılan olarak true olarak ayarlamanız gerekir. Ardından uygulamanız başladığında bunu kontrol edin. Doğruysa, Properties.Settings.Default.Upgrade (), .Save () ve .Reload () öğelerini çağırın. Ardından UpgradeNeeded öğesini false olarak sıfırlayın ve kaydedin.
19:11

86

Yolu programlı olarak alabilirsiniz:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

1
Hmm, bunun döndürdüğü yolun Ayarlar tarafından kullanılan yol olmadığını görüyorum. Herhangi bir fikir?
George Mauer

1
@GeorgeMauer Sen ortalama Roamingya da belki LocalLowyerine Local? ConfigurationUserLevelkullanıcının dolaşım veya yerel profiline bağlıdır. Şirketlerde genellikle dolaşıyor.
Kay Zed

Bağlanma Bu yanıt yolu görünüyor ne gibi gösteren ve bunun altında benim yorum.
Kay Zed

Ben her yerde aynı cevabı buluyorum, ConfigurationManager.OpenExeConfiguration () kullanın - ama hangi ConfigurationUserLevel geçtiğiniz değerine bağlı olarak üç seçenek verir, hangi üç farklı sonuç verir - bu nedir ?. Bir programda, kodda, çalışma zamanında, programın ayarlarını hangi dosyadan aldığını nasıl öğrenirsiniz?
Dave

Hiçbiri: Tüm kullanıcılar için geçerli olan Yapılandırmayı, PerUserRoaming: Geçerli kullanıcı için geçerli olan dolaşım Yapılandırmasını alır, PerUserRoamingAndLocal: Geçerli kullanıcı için geçerli olan yerel Yapılandırmayı alır.
Akbaritabar

8

beni doğru yöne yönlendirdiğiniz için teşekkürler. Bu canavarlıkta bulunan user.config dosyasını buldum: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Uygulamamın sürümünü yükseltmek zorunda kaldım ve tüm ayarlar kayboldu. uygulaması yeni sürümle yeni bir klasör oluşturdu ve varsayılan ayarları kullandı. dosyanın nerede saklandığını bulmak sonsuza dek sürdü, ancak ayarları yeni sürüme almak için basit bir kopyala yapıştırdı.


LOOKSLIKESOMEKINDOFHASH'i nasıl bilebilirsiniz?
NeoSvet

1
Properties.Settings.Default.Upgrade () çağrısı otomatik olarak aynısını yapar. Yukarıdaki diğer yanıtta @jasonh'un söylediği gibi, yapılandırmayı önceki sürümünden geri yükler.
Alex

5

Belgelerinize ve Ayarlarınıza kaydedilir \% user% \ Local Settings \ Application Data ...... etc orada user.config adında bir dosya arayın

ancak konum değişebilir.


5
Aslında, kullanıcıya özgü özellikler için doğru ortam değişkeni% userprofile% şeklindedir. Vista veya 7 altında Documents and Settings belirtilmesi, eksik bir klasör veya bulduğu klasör için eksik izinlerle sonuçlanır.
jasonh

1

Windows hizmetlerimden biri, Windows Server 2016'da Yerel Sistem olarak oturum açmıştır ve user.config dosyasını C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {uygulama adınız} altında bulabilirim.

Bence en kolay yol C sürücüsünde uygulama adınızı aramak ve sonra user.config'in nerede olduğunu kontrol etmektir.


0

Kullanıcıya özgü ayarlar, kullanıcının o uygulamanın Uygulama Verileri klasörüne kaydedilir. Bir user.configdosya arayın .

Ne beklediğinizi bilmiyorum, çünkü kullanıcılar genellikle başlangıçta yürütülebilir dizine yazma erişimine bile sahip değiller.


0

Bunlar kaydedilir YOUR_APP.exe.config, dosya dosya ile aynı klasöre kaydedilir YOUR_APP.exe, <userSettings>bölüm:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

İşte cs kodu:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...

-1

Microsoft Store'dan uygulama ayarlarının nerede olduğunu merak eden herkes, ya WindowsApps'dadır, bu da çok kilitlidir, ancak uygulamanızı açıp Görev Yöneticisi ile dosya yolunu açarak oraya ulaşabilirsiniz.

Ancak kaydedilmeleri daha olasıdır C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

Proje kök klasörünüzün altında "Özellikler" adlı bir klasör vardır ve bu klasörün altında * .settings dosyası vardır. Burada depolanır.


1
geliştirme sırasında doğru . Konuşlandıktan sonra başka bir yere giderler.
Joel Coehoorn

2
i bir geliştirme ortamında çalışan vardı ve dosya değişmeden kaldı. güncellenenleri değil, yalnızca varsayılan değeri burada saklar.
Stan R.

4
Stan R doğrudur, sadece varsayılan değeri saklar. Hata ayıklama sırasında değiştirebileceğiniz değerler değil.
İsimsiz Tip
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.