2009-03-27 69 views
17

Cách đăng ký Windows có nghĩa là gì để được sử dụng? Tôi biết không sao để lưu trữ một lượng nhỏ tùy chọn người dùng, nhưng liệu có được coi là thực hành không tốt để lưu trữ tất cả dữ liệu người dùng của bạn ở đó không? Tôi nghĩ nó sẽ phụ thuộc vào tập dữ liệu, vì vậy làm thế nào về số lượng nhỏ dữ liệu, nói rằng, ít hơn 2KB, trong 100 hoặc nhiều cặp khóa/giá trị khác nhau. Đây có phải là hành động xấu không? Một tập tin phẳng hoặc db SQLite có thực hành tốt hơn không?Thực hành tốt nhất của Windows Registry

Trả lời

10

Đối với tôi, các mục cấu hình người dùng đơn giản và dữ liệu người dùng tốt hơn nên được lưu trữ trong tệp cấu hình XML đơn giản, một SQLLite db hoặc MS SQL Server Compact db. Phương tiện lưu trữ chính xác phụ thuộc vào các chi tiết cụ thể của việc triển khai.

Tôi chỉ sử dụng sổ đăng ký cho những thứ tôi cần đặt không thường xuyên và người dùng không cần phải có thể thay đổi/xem. Ví dụ: tôi đã lưu trữ thông tin giấy phép được mã hóa trong sổ đăng ký trước để tránh việc xóa dữ liệu người dùng ngẫu nhiên.

+2

Bạn đề cập đến loại bảo mật nào và các tác động khác? – quux

+0

Tôi không thấy các tác động bảo mật của hệ thống tập tin theo bất kỳ cách nào khác với cách đăng ký của hệ thống. – Alex

+0

Truy cập vào Registry trong Windows 7 yêu cầu độ cao, mà trong thực tế nó không cần thiết trừ khi bạn đang cố gắng để móc vào sổ đăng ký cho những thứ như tự động bắt đầu vv Vì vậy tôi tránh xa như tôi muốn giữ cho hệ thống của tôi ít nhất đặc quyền nhất có thể. –

2

Tôi nghĩ Microsoft đang khuyến khích sử dụng bộ nhớ bị cô lập thay vì sổ đăng ký Windows.

Here's một bài viết giải thích cách sử dụng nó trong .Net.

Bạn có thể tìm thấy các tệp đó trong Windows XP trong Tài liệu & Cài đặt \\ Cài đặt cục bộ \ Dữ liệu ứng dụng \ Bộ nhớ riêng biệt. Dữ liệu nằm trong các tệp .dat

+0

Lưu ý rằng một tệp trong Bộ nhớ riêng chỉ có thể được truy cập bởi một hội đồng cụ thể, do đó bạn không thể dễ dàng thực hiện những việc như xóa tùy chọn người dùng khỏi IS trong trình gỡ cài đặt. Nó cũng tẻ nhạt bằng tay tìm kiếm các tập tin dữ liệu để xử lý sự cố trong quá trình phát triển. Điều cần thiết là cách tạo khóa duy nhất cho công ty sử dụng (ví dụ: CompanyName \ ProductName hoặc GUID) để nhiều tệp .exes có thể chia sẻ tệp dữ liệu và nhà phát triển/người dùng có thể dễ dàng xử lý chúng nếu cần. Vậy là IS đã chết. % Sống% AppData%. –

5

Vì mỗi người dùng có không gian thư mục trong Windows đã dành riêng để lưu trữ dữ liệu người dùng ứng dụng, tôi sử dụng nó để lưu trữ dữ liệu cấp người dùng (ví dụ: tùy chọn) ở đó.

Trong C#, tôi sẽ nhận được nó bằng cách làm một cái gì đó như thế này:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

Thông thường, tôi sẽ lưu trữ file SQLite có hoặc bất cứ điều gì là thích hợp cho các ứng dụng.

6

Sử dụng đăng ký để lưu trữ dữ liệu chủ yếu là một vấn đề: Nó không thân thiện với người dùng. Người dùng hầu như không có cơ hội sao lưu cài đặt của họ, sao chép chúng sang máy tính khác, khắc phục sự cố (hoặc đặt lại chúng) nếu chúng bị hỏng hoặc thường chỉ xem phần mềm của chúng đang hoạt động.

Quy tắc chung của tôi là chỉ sử dụng đăng ký để giao tiếp với hệ điều hành. Các liên kết Filetype, các mục của trình gỡ cài đặt, các tiến trình chạy lúc khởi động, những thứ đó rõ ràng phải nằm trong sổ đăng ký.

Nhưng dữ liệu được sử dụng trong ứng dụng của bạn chỉ thuộc về một tệp trong thư mục Dữ liệu ứng dụng của bạn. (whiever một trong 3+ thư mục dữ liệu ứng dụng mà Microsoft hiện đang muốn bạn sử dụng),

+1

người dùng không quyền lực không, nhưng sau đó họ cũng sẽ có một thời gian khó sao lưu một tập tin trong% APPDATA%/MyApp. Việc đăng ký là dễ dàng để xuất khẩu và nhập khẩu - tìm cây của bạn (trong HKCU/Phần mềm/MyApp hoặc bất cứ nơi nào) nhấp chuột phải và xuất khẩu. Đơn giản như nén một thư mục. – gbjbaanb

1

Với tôi có vẻ dễ dàng hơn khi nghĩ về những gì bạn KHÔNG nên đặt ở đó. ví dụ: dữ liệu động, chẳng hạn như "tệp cuối cùng được mở" của trình chỉnh sửa và cho mỗi tùy chọn dự án. Nó thực sự gây phiền nhiễu khi ứng dụng của bạn mất đồng bộ với đăng ký (xóa tệp, lỗi hệ thống, v.v.) và truy xuất thông tin không hợp lệ nữa, có thể là do người dùng bế tắc. Tại một công việc trước đó, tôi thấy một anh chàng lưu trữ một tỷ lệ hoàn thành chuyển dữ liệu ở đó, Viết các giá trị mới ở mỗi 10k hoặc hơn và có GUI lấy giá trị này mỗi giây để nó có thể hiển thị trên thanh tiêu đề.

+0

Yikes! Và tôi nghĩ rằng một số sử dụng của tôi trong quá khứ là xấu! (Không, không thực sự sẵn lòng chia sẻ!) –

+0

Ồ, thôi nào! Đừng ngại! Chúng tôi sẽ không nói với ai cả, thật lòng! – Treb

+0

Tôi không hiểu. Tại sao anh chàng này sẽ ghi vào sổ đăng ký với một phần của ứng dụng của mình, và sau đó thăm dò ý kiến ​​và đọc giá trị từ sổ đăng ký để hiển thị? Điều này có vẻ ngu xuẩn theo cách không liên quan gì tới cơ chế kiên trì cụ thể. – MusiGenesis

2

Tôi sẽ phân biệt:

Một mặt có dữ liệu cấu hình ứng dụng cụ thể cần thiết để ứng dụng chạy, ví dụ:Địa chỉ IP để kết nối, thư mục nào để sử dụng cho loại tệp nào, v.v ... và không nhỏ cho mỗi cài đặt người dùng. Tôi đặt trong một tập tin cấu hình, định dạng ini cho các công cụ đơn giản, xml nếu nó phức tạp hơn.

Mặt khác, có một cài đặt nhỏ cho mỗi người dùng (ví dụ tốt nhất: vị trí cửa sổ và bố cục). Để tránh lộn xộn các tập tin cấu hình (mà một số người dùng sẽ muốn tự chỉnh sửa, vì vậy ít mục và sắp xếp rõ ràng là phải), tôi thích đặt chúng trong sổ đăng ký (với mặc định bảo thủ được đặt trong ứng dụng nếu không có cài đặt trong sổ đăng ký có thể được tìm thấy).

Tôi chủ yếu làm điều đó như istmatt sais: Tôi lưu trữ tệp cấu hình bên trong thư mục %APPDATA%. Thông thường trong %APPDATA%\ApplicationName, tôi không thích mặc định .NET của APPDATA%\CompanyName\ApplicationName\Version, mức độ chi tiết và độ phức tạp đó là phản tác dụng đối với hầu hết các ứng dụng nhỏ đến vừa.

Tôi không đồng ý với ví dụ về Marcelo MD không lưu trữ các tệp được sử dụng gần đây trong sổ đăng ký. IMO chính xác là loại thông tin cụ thể của người dùng dễ bay hơi có thể được lưu trữ ở đó. (ví dụ về những gì không làm của ông là rất tốt, mặc dù!)

4

Nếu ứng dụng của bạn sẽ được triển khai "trong doanh nghiệp", hãy ghi nhớ rằng các quản trị viên có thể tinh chỉnh registry bằng các công cụ chính sách nhóm. Ví dụ: nếu firefox đã sử dụng đăng ký cho những thứ như máy chủ proxy, nó sẽ triển khai nhanh chóng vì quản trị viên có thể sử dụng các công cụ chuẩn trong thư mục hoạt động để thiết lập. Nếu bạn sử dụng bất cứ điều gì khác, tôi không nghĩ rằng những điều như vậy có thể được thực hiện rất dễ dàng.

Vì vậy, đừng bỏ qua sổ đăng ký tất cả cùng nhau. Nếu có cơ hội quản trị viên có thể muốn chuẩn hóa các phần cấu hình của bạn trên mạng, hãy đặt cài đặt trong sổ đăng ký.

+0

Ngoài ra, nếu bạn thực sự muốn thân thiện với doanh nghiệp, bạn có thể đọc các cài đặt từ phần Chính sách của sổ đăng ký và thậm chí cung cấp một mẫu ADM và/hoặc ADMX để đi cùng với ứng dụng của bạn. –

15

Tôi sẽ có một cái nhìn trái ngược.

Sổ đăng ký là nơi tốt để đặt dữ liệu cấu hình của tất cả các loại. Nói chung nó nhanh hơn hầu hết các tệp cấu hình và đáng tin cậy hơn (các hoạt động riêng lẻ trên sổ đăng ký được giao dịch vì vậy nếu ứng dụng của bạn bị treo trong khi ghi sổ đăng ký không bị hỏng - nói chung không phải là trường hợp với tệp ini).

Marcelo MD là hoàn toàn đúng: Lưu trữ những thứ như tỷ lệ phần trăm hoạt động hoàn thành trong sổ đăng ký (hoặc bất kỳ lưu trữ không volitile khác) là một ý tưởng khủng khiếp. Mặt khác, lưu trữ dữ liệu giống như các tệp được sử dụng gần đây nhất là tốt - sổ đăng ký được xây dựng cho loại vấn đề đó.

Một số người nhận xét khác về bài đăng này nói về danh sách MRU đã thảo luận vấn đề xảy ra khi danh sách MRU không đồng bộ do lỗi ứng dụng. Tôi tự hỏi tại sao lưu trữ danh sách MRU trong một tệp phẳng trong bộ nhớ cho mỗi người dùng là tốt hơn?

Tôi cũng không chắc "tác động bảo mật" của việc lưu trữ dữ liệu trong sổ đăng ký là gì. Việc đăng ký chỉ là an toàn như hệ thống tập tin - đăng ký và hệ thống tập tin sử dụng cùng một cơ chế ACL để bảo vệ dữ liệu của họ.

Nếu bạn định lưu trữ dữ liệu người dùng trong một tệp, bạn hoàn toàn nên đặt dữ liệu của mình trong% APPDATA% \ CompanyName \ ApplicationName ít nhất - theo cách đó nếu hai nhà phát triển khác nhau tạo một ứng dụng có cùng tên (số lượng Ứng dụng "Trình quản lý phương tiện" có ở đó không?) Bạn sẽ không có xung đột.

Các vấn đề liên quan