Các thuộc tính.S.S.D.Dault được lưu trữ ở đâu?


145

Tôi nghĩ rằng tôi biết điều này, nhưng hôm nay tôi đã được chứng minh là sai - một lần nữa.

Chạy VS2008, .NET 3.5 và C #. Tôi đã thêm cài đặt Người dùng vào tab Cài đặt thuộc tính với các giá trị mặc định, sau đó đọc chúng bằng cách sử dụng mã này:

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

Sau đó, sau khi người dùng chỉnh sửa giá trị trong hộp thoại tùy chọn, tôi lưu nó như thế này:

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

Câu hỏi của tôi là, giá trị mới này được lưu ở đâu? tệp MyApp.exe.config trong thư mục thực thi không được cập nhật, nó vẫn chứa các giá trị mặc định. Ngoài ra, theo như tôi có thể nói, không có tệp nào trong thư mục đó được cập nhật cả! Tuy nhiên, khi chương trình đọc lại giá trị, nó sẽ nhận được giá trị thay đổi, vì vậy tôi biết nó được lưu ở đâu đó ...

Đây không chỉ là học thuật, tôi cần có thể tự chỉnh sửa giá trị sáng nay và bị bối rối khi tôi không thể tìm thấy bất cứ điều gì đang thay đổi.


2
Điều quan trọng cần lưu ý là vị trí lưu trữ có thể thay đổi giữa các phiên bản khác nhau của khung hoặc HĐH. Không mã hóa bất cứ thứ gì lập trình đến vị trí lưu trữ.
Greg D

Nếu bạn đang ở trong phòng thu trực quan, đang phát triển một ứng dụng mới, hãy kiểm tra tại AppData \ Local \ Microsoft \ TÊN ỨNG DỤNG CỦA BẠN Tên tệp là user.config. Tôi đang ở trong Windows 7
JenonD 18/03/2015

hoặc theo AppData \ Local one
KansaiRobot

Một cái gì đó tôi đang vật lộn với điều đó dẫn tôi đến câu hỏi này và những câu hỏi khác: user.config không được tạo cho đến khi appsSinstall.Save (); được gọi là. (trong đó applicationSinstall được định nghĩa ApplicationSinstall applicationSinstall = new ApplicationSinstall (this);).
hợp nhất

Câu trả lời:


142

Để hoạt động với các phiên bản mới hơn của chính sách Windows chỉ cho phép truy cập đọc theo mặc định vào thư mục Tệp chương trình (trừ khi bạn nhắc nâng cao với UAC, nhưng đó là một chủ đề khác ...), ứng dụng của bạn sẽ có thư mục cài đặt bên dưới %userprofile%\appdata\localhoặc %userprofile%\Local Settings\Application Datatùy thuộc vào phiên bản Windows bạn đang chạy, cho các cài đặt dành riêng cho người dùng. Nếu bạn lưu trữ cài đặt cho tất cả người dùng, thì họ sẽ ở trong thư mục tương ứng bên dưới C:\usershoặc C:\Documents and Settingscho tất cả các cấu hình người dùng (ví dụ C:\users\public\appdata\local:).


3
Ngoài ra, .config được tạo trong Visual Studio, kết thúc trong thư mục của tệp thực thi, tôi tin rằng chỉ được sử dụng để gỡ lỗi. Khi đóng gói ứng dụng cuối cùng, bạn không bao gồm .config này, vì nó được tạo lần đầu tiên khi người dùng chạy ứng dụng.
Will Eddins

11
Phiên bản mới hơn? Đây là trường hợp kể từ windows 2000. Bạn đã thoát khỏi nó vì bạn đang chạy với tư cách quản trị viên.
Joel Coehoorn

1
@Joel Coehoorn: Đúng, tuy nhiên hiện tại trong tài khoản quản trị viên trong Windows Vista trở đi, bạn không thể có quyền truy cập ghi vào Tệp chương trình mà không có dấu nhắc nâng cao UAC theo mặc định. Đó là chính sách đã thay đổi. :)
jasonh

2
Cũng cần lưu ý rằng thư mục thay đổi với mỗi lần nâng cấp phiên bản - vì vậy người dùng sẽ mất tùy chọn mỗi khi bạn cập nhật phần mềm.
Ian Boyd

17
Trên thực tế không, họ không. Bạn cần tạo một cài đặt, đặt tên nó là "Nâng cấp" và mặc định nó là đúng. Sau đó, khi ứng dụng của bạn bắt đầu, hãy kiểm tra điều này. Nếu đó là sự thật, hãy gọi Properties.Sinstall.Default.Upgrad (), .Save () và .Reload (). Sau đó đặt lại Nâng cấpNeeded thành false và lưu.
jasonh

86

Bạn có thể nhận được đường dẫn theo chương trình:

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

1
Hmm, tôi đang thấy các tình huống trong đó đường dẫn được trả về này KHÔNG phải là đường dẫn được Cài đặt sử dụng. Bất kỳ cái nhìn sâu sắc?
George Mauer

1
@GeorgeMauer Ý bạn là Roaminghay có lẽ LocalLowthay vì Local? ConfigurationUserLevelphụ thuộc vào hồ sơ của người dùng đang chuyển vùng hoặc cục bộ. Trong các công ty, nó thường được chuyển vùng.
Kay Zed

Liên kết với câu trả lời này và ý kiến ​​của tôi dưới nó, cho thấy đường dẫn trông như thế nào.
Kay Zed

Tôi đang tìm thấy câu trả lời tương tự ở mọi nơi, sử dụng Cấu hình Trình quản lý.OpenExeConfiguration () - nhưng cung cấp ba tùy chọn tùy thuộc vào giá trị nào của Cấu hình Trình duyệt mà bạn vượt qua, cung cấp ba kết quả khác nhau - đó là gì? Làm thế nào để bạn tìm ra, trong một chương trình, trong mã, vào thời gian chạy, chính xác tập tin nào mà chương trình nhận được cài đặt từ đó?
Dave

Không có: Nhận Cấu hình áp dụng cho tất cả người dùng, PerUserRoaming: Nhận Cấu hình chuyển vùng áp dụng cho người dùng hiện tại, PerUserRoamingAndLocal: Nhận Cấu hình cục bộ áp dụng cho người dùng hiện tại.
Akbaritabar

8

Cám ơn đã chỉ tôi hướng đi đúng. Tôi đã tìm thấy user.config nằm ở vị trí quái dị này: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Tôi đã phải cập nhật phiên bản trên ứng dụng của mình và tất cả các cài đặt dường như đã biến mất. ứng dụng đã tạo một thư mục mới với phiên bản mới và sử dụng các cài đặt mặc định. mất mãi mãi để tìm nơi lưu trữ tệp, nhưng sau đó nó là một bản sao và dán đơn giản để có được các cài đặt cho phiên bản mới.


Làm thế nào để biết LOOKSLIKESOMEKINDOFHASH?
NeoSvet

1
Cuộc gọi Properties.Sinstall.Default.Upgrad () sẽ tự động thực hiện tương tự. Nó khôi phục cấu hình từ phiên bản trước của nó, giống như @jasonh đã nói trong phần trả lời khác ở trên.
Alex

5

nó được lưu trong Tài liệu và Cài đặt của bạn \% user% \ Cài đặt cục bộ \ Dữ liệu ứng dụng ...... vv tìm kiếm một tệp có tên user.config ở đó

vị trí có thể thay đổi tuy nhiên.


5
Trên thực tế, biến môi trường chính xác cho các thuộc tính dành riêng cho người dùng là% userprofile%. Chỉ định Tài liệu và Cài đặt trong Vista hoặc 7 sẽ dẫn đến một thư mục bị thiếu hoặc thiếu quyền đối với thư mục mà nó tìm thấy.
09:00

1

Một trong những dịch vụ windows của tôi được đăng nhập là Local System trong windows server 2016 và tôi có thể tìm thấy user.config trong C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {tên ứng dụng của bạn}.

Tôi nghĩ cách dễ nhất là tìm kiếm tên ứng dụng của bạn trên ổ C và sau đó kiểm tra user.config ở đâu


0

Cài đặt dành riêng cho người dùng được lưu trong thư mục Dữ liệu ứng dụng của người dùng cho ứng dụng đó. Hãy tìm một user.configtập tin.

Tôi không biết những gì bạn mong đợi, vì người dùng thường không có quyền truy cập ghi vào thư mục thực thi ở nơi đầu tiên.


0

Chúng được lưu trong YOUR_APP.exe.config, tệp được lưu trong cùng thư mục với YOUR_APP.exetệp, <userSettings>phần:

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

đây là mã 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;
    }
...

-1

Đối với bất kỳ ai thắc mắc cài đặt ứng dụng từ Microsoft Store ở đâu, chúng đều có trong WindowsApps, rất bị khóa, nhưng bạn có thể đến đó bằng cách mở ứng dụng của mình và sau đó mở đường dẫn tệp bằng Trình quản lý tác vụ.

Nhưng nhiều khả năng là chúng được lưu trong C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

Có một thư mục có tên "Thuộc tính" trong thư mục gốc dự án của bạn và có tệp * .sinstall trong thư mục đó. Đó là nơi nó được lưu trữ.


1
Nó đúng trong quá trình phát triển . Sau khi triển khai họ đi nơi khác.
Joel Coehoorn

2
tôi đã chạy nó trong một môi trường phát triển và tập tin vẫn không thay đổi. nó chỉ lưu trữ giá trị mặc định ở đó, không cập nhật.
Stan R.

4
Stan R là chính xác, nó chỉ lưu trữ giá trị mặc định. Không phải các giá trị bạn có thể thay đổi trong quá trình gỡ lỗi.
Loại ẩn danh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.