Di mana Properties.Settings.Fault disimpan?

145

Saya pikir saya tahu ini, tetapi hari ini saya terbukti salah - lagi.

Menjalankan VS2008, .NET 3.5 dan C #. Saya menambahkan pengaturan Pengguna ke tab Pengaturan Properti dengan nilai default, lalu membacanya dengan menggunakan kode ini:

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

Kemudian, setelah pengguna mengedit nilai dalam dialog opsi, saya menyimpannya seperti ini:

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

Pertanyaan saya adalah, di mana nilai baru ini disimpan? file MyApp.exe.config di direktori yang dapat dieksekusi tidak diperbarui, masih berisi nilai default. Plus, sejauh yang saya tahu, tidak ada file lain di direktori itu yang diperbarui! Namun, ketika program membaca nilai kembali, ia mendapat nilai yang diubah, jadi saya tahu itu disimpan di suatu tempat ...

Ini bukan hanya akademik, saya harus dapat mengedit nilai secara manual pagi ini dan membuat saya bingung ketika saya tidak dapat menemukan apa pun yang berubah.

DaveN59
sumber
2
Penting untuk dicatat bahwa lokasi penyimpanan dapat berubah antara versi kerangka kerja atau OS yang berbeda. Jangan membuat hardcode apa pun yang terprogram ke lokasi penyimpanan.
Greg D
Jika Anda berada di visual studio, mengembangkan aplikasi baru, lalu periksa di AppData \ Local \ Microsoft \ NAMA APLIKASI ANDA Nama file adalah user.config. Saya di Windows 7
JenonD
atau di bawah AppData \ Local
KansaiRobot
Sesuatu yang saya perjuangkan dengan yang mengarahkan saya ke pertanyaan ini dan yang lainnya: user.config tidak dibuat sampai applicationSettings.Save (); disebut. (di mana applicationSettings didefinisikan ApplicationSettings applicationSettings = ApplicationSettings baru (ini);).
amalgamate

Jawaban:

142

Agar dapat bekerja dengan versi Windows yang lebih baru dari kebijakan Windows yang hanya mengizinkan akses baca secara default ke folder Program Files (kecuali Anda meminta peningkatan dengan UAC, tapi itu topik lain ...), aplikasi Anda akan memiliki folder pengaturan di bawah %userprofile%\appdata\localatau %userprofile%\Local Settings\Application Datatergantung pada versi Windows yang Anda jalankan, untuk pengaturan yang spesifik pengguna. Jika Anda menyimpan pengaturan untuk semua pengguna, maka mereka akan berada di folder yang sesuai di bawah C:\usersatau C:\Documents and Settingsuntuk semua profil pengguna (mis C:\users\public\appdata\local. :) .

jasonh
sumber
3
Juga, .config dihasilkan dalam Visual Studio, yang berakhir di folder yang dapat dieksekusi, saya percaya hanya digunakan untuk debugging. Saat mengemas aplikasi terakhir, Anda tidak menyertakan .config ini, karena ini dibuat saat pertama kali pengguna menjalankan aplikasi.
Will Eddins
11
Versi yang lebih baru? Ini telah terjadi sejak windows 2000. Anda baru saja lolos karena Anda menjalankannya sebagai administrator.
Joel Coehoorn
1
@ Joel Coehoorn: Benar, namun sekarang di akun administrator di Windows Vista dan seterusnya, Anda tidak bisa mendapatkan akses tulis ke File Program tanpa permintaan elevasi UAC secara default. Itu kebijakan yang berubah. :)
jasonh
2
Perlu juga dicatat bahwa folder berubah dengan setiap peningkatan versi - sehingga pengguna kehilangan preferensi mereka setiap kali Anda memperbarui perangkat lunak.
Ian Boyd
17
Sebenarnya tidak, mereka tidak. Anda perlu membuat pengaturan, beri nama seperti "UpgradeNeeded" dan default menjadi true. Lalu ketika aplikasi Anda mulai, periksa ini. Jika itu benar, hubungi Properties.Settings.Default.Upgrade (), .Save () dan .Road (). Kemudian reset UpgradeNeeded ke false dan simpan.
jasonh
86

Anda bisa mendapatkan jalur secara terprogram:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Akbaritabar
sumber
1
Hmm, saya melihat situasi di mana jalur yang dikembalikan oleh ini BUKAN jalan yang digunakan oleh Pengaturan. Adakah wawasan?
George Mauer
1
@GeorgeMauer Maksud Anda Roamingatau mungkin LocalLowbukan Local? ConfigurationUserLeveltergantung pada profil pengguna yang sedang roaming atau lokal. Di perusahaan sering berkeliaran.
Kay Zed
Menautkan ke jawaban ini dan komentar saya di bawahnya, menunjukkan seperti apa jalan itu.
Kay Zed
Saya menemukan jawaban yang sama di mana-mana, gunakan ConfigurationManager.OpenExeConfiguration () - tetapi itu memberikan tiga opsi tergantung pada nilai ConfigurationUserLevel yang Anda lewati, yang memberikan tiga hasil berbeda - mana itu ?. Bagaimana Anda mengetahui, dalam suatu program, dalam kode, pada saat run time, tepatnya dari file mana program tersebut mendapatkan pengaturannya?
Dave
Tidak ada: Mendapat Konfigurasi yang berlaku untuk semua pengguna, PerUserRoaming: Mendapat Konfigurasi roaming yang berlaku untuk pengguna saat ini, PerUserRoamingAndLocal: Mendapat Konfigurasi lokal yang berlaku untuk pengguna saat ini.
Akbaritabar
8

terima kasih telah menunjukkan saya ke arah yang benar. Saya menemukan user.config terletak di monstrosity ini: c: \ users \ USER \ AppData \ Local \ COMPPLER \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Saya harus memperbaiki versi pada aplikasi saya dan semua pengaturan tampaknya telah menghilang. aplikasi membuat folder baru dengan versi baru dan menggunakan pengaturan default. butuh selamanya untuk menemukan di mana file itu disimpan, tetapi kemudian itu adalah salin dan tempel sederhana untuk mendapatkan pengaturan ke versi baru.

Jeremy Ehret
sumber
Bagaimana cara mengetahui LOOKSLIKESOMEKINDOFHASH?
NeoSvet
1
Panggilan Properties.Settings.Default.Upgrade () akan melakukan hal yang sama secara otomatis. Ini mengembalikan konfigurasi dari versi sebelumnya, seperti @jasonh katakan di balasan lain di atas.
Alex
5

itu disimpan dalam Dokumen dan Pengaturan Anda \% pengguna% \ Pengaturan Lokal \ Data Aplikasi ...... dll mencari file bernama user.config di sana

lokasi dapat berubah namun.

Stan R.
sumber
5
Sebenarnya, variabel lingkungan yang benar untuk properti khusus pengguna adalah% userprofile%. Menentukan Dokumen dan Pengaturan di bawah Vista atau 7 akan menghasilkan folder yang hilang atau hilang izin ke folder yang ditemukannya.
jasonh
1

Salah satu layanan windows saya masuk sebagai Sistem Lokal di windows server 2016, dan saya dapat menemukan user.config di bawah C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {nama aplikasi Anda}.

Saya pikir cara termudah adalah mencari nama aplikasi Anda pada drive C dan kemudian memeriksa di mana user.config

EvilDuck
sumber
0

Pengaturan khusus pengguna disimpan di folder Data Aplikasi pengguna untuk aplikasi itu. Cari user.configfile.

Saya tidak tahu apa yang Anda harapkan, karena pengguna sering kali bahkan tidak memiliki akses tulis ke direktori yang dapat dieksekusi.

Joel Coehoorn
sumber
0

Mereka disimpan YOUR_APP.exe.config, file disimpan di folder yang sama dengan YOUR_APP.exefile, <userSettings>bagian:

   <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>

di sini adalah kode cs:

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;
    }
...
Luke
sumber
-1

Bagi siapa pun yang bertanya-tanya di mana pengaturan untuk aplikasi dari Microsoft Store, mereka berada di WindowsApps, yang sangat terkunci, tetapi Anda bisa sampai di sana dengan membuka aplikasi Anda dan kemudian membuka jalur file dengan Task-Manager.

Tetapi kemungkinan besar mereka diselamatkan C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

Lukas
sumber
-17

Ada folder bernama "Properties" di bawah folder root proyek Anda, dan ada file * .settings di bawah folder itu. Di situlah disimpan.

JW
sumber
1
itu benar selama pengembangan . Setelah ditempatkan mereka pergi ke tempat lain.
Joel Coehoorn
2
Saya menjalankan ini di lingkungan pengembangan dan file tetap tidak berubah. hanya menyimpan nilai default di sana, bukan yang diperbarui.
Stan R.
4
Stan R benar, hanya menyimpan nilai default. Bukan nilai yang dapat Anda ubah saat debugging.
Jenis Anonim