2010-03-02 39 views
7

Khi phần mềm của tôi được cài đặt, thông qua MSI, nó tạo một số khóa đăng ký trong HKLM. Khi mọi người đang sử dụng phần mềm, sở thích cá nhân của họ được lưu vào HKCU. Khi phần mềm được gỡ cài đặt, các khóa đăng ký HKLM và HKCU sẽ bị xóa, nhưng tôi nghĩ rằng đó chỉ là các khóa HKCU cho người dùng đang chạy quá trình gỡ cài đặt sẽ bị xóa. Điều này có đúng không? Nếu vậy, làm cách nào để đảm bảo khóa con HKCU cho những người khác đã sử dụng phần mềm của tôi trên cùng một máy bị xóa?Làm thế nào để loại bỏ các khóa registry HKCU khi gỡ cài đặt phần mềm?

CẬP NHẬT: 'Tùy chọn riêng lẻ' được lưu trong trường hợp của tôi không thực sự là cài đặt mà người dùng đã chọn, mà là dữ liệu mà ứng dụng đã lưu trong khi đang chạy cho người dùng đó. Vì vậy, nó không thực sự là dữ liệu mà người dùng muốn giữ lại. Có vẻ như quyền xóa nó khi gỡ cài đặt vì nó sẽ không có bất kỳ sử dụng nào nếu ứng dụng được cài đặt lại. Vì vậy, tôi đoán gợi ý tốt nhất cho đến nay là Ed's: don't use the registry, mặc dù điều đó không thực sự giải quyết được câu hỏi ban đầu.

Trả lời

2

Câu trả lời ngắn gọn là bạn không. Trình cài đặt được giả định để xóa các mục tạo và không có gì khác. Nếu ứng dụng của bạn tạo cài đặt cho mỗi người dùng trong thời gian chạy, ứng dụng đó không thuộc sở hữu của quy trình cài đặt.

Nếu bạn thực sự thực sự muốn thực hiện việc này, bạn có thể tạo hành động tùy chỉnh và buộc gỡ cài đặt chạy với tư cách quản trị viên để bạn có thể truy cập tất cả các phát ban của người dùng. Được cảnh báo - đây là hành vi hoàn toàn không chuẩn và có thể mất một lượng thời gian đáng kể là & tài nguyên hệ thống để gắn kết & ngắt kết nối tất cả các phát ban của người dùng. Và nếu trình gỡ cài đặt của bạn không cẩn thận, bạn có thể làm hỏng mọi thứ trong tổ chức cấp hệ thống và làm cho hệ thống của bạn không thể khởi động được.

Như tôi đã đề cập trong phần nhận xét để trả lời của sascha, Windows Installer Best Practices nói (nói?) Để rời khỏi cài đặt người dùng tùy chỉnh khi gỡ cài đặt. Bằng cách đó, nếu người dùng cài đặt lại phần mềm của bạn, cài đặt của họ có sẵn.

+0

Tôi không thể lặp qua từng subtrees của HKEY_USERS và xóa dữ liệu của tôi? Hoặc là những gì bạn đang nói sẽ chậm? – Rory

+0

Thật nguy hiểm khi xóa dữ liệu theo cách này trong các tình huống có hồ sơ chuyển vùng. Tôi hơi mờ về chi tiết, nhưng tôi nghĩ nó sẽ làm tăng so sánh dấu thời gian và có thể khiến dữ liệu hồ sơ bị mất nếu hồ sơ không chính xác được chọn làm người chiến thắng của "hợp nhất". –

+1

OK, nhận ra rằng đó là * không * 'dữ liệu của bạn'. Khi nó nằm trong hive đăng ký người dùng, đó là dữ liệu * của người dùng *. Và có, tải và dỡ bỏ các phát ban người dùng riêng biệt là khá chậm. Và bạn cần SCRUPULOUSLY không làm bất cứ điều gì để cấu hình tài khoản hệ thống, vì vậy trước tiên bạn cần phải xác định các hồ sơ người dùng thường xuyên. Và như MichaelU đề cập, nếu hồ sơ chuyển vùng đang được sử dụng, bạn có thể gây ra những thứ bị hỏng mà không thuộc về ứng dụng của bạn (bạn có thực sự muốn một nhóm IT khách hàng gọi cho bạn với một hóa đơn để xây dựng lại tất cả hồ sơ người dùng của họ không?). ĐÂY LÀ MỘT Ý TƯỞNG TỒI. – DaveE

2

Không thể thực hiện được, chỉ các mục nhập cho người dùng hiện tại bị xóa.

Bạn có thể sử dụng ActiveSetup để giải quyết vấn đề này, tuy nhiên nó không được nhiều tài liệu ngoài liên kết đó và không được Microsoft hỗ trợ. Vì vậy, nếu bạn sử dụng nó, đừng dựa vào nó;)

Ý tưởng đằng sau việc không xóa dữ liệu người dùng trong khi gỡ cài đặt là một chủ đề khá gây tranh cãi với một số lịch sử thú vị ... Tôi nhớ các phiên bản cũ của Office được sử dụng để lưu tài liệu bên dưới thư mục cài đặt, số khiếu nại chúng tôi sử dụng để nhận khi sau khi người dùng nâng cấp xóa thư mục Office cũ và mất tài liệu của họ là rất lớn. Gần đây, khiếu nại là mọi người mất mẫu tùy chỉnh Normal.dot của họ.

Khi ai đó tham gia phần mềm doanh nghiệp, quan điểm của tôi là nếu mọi người dựa vào phần mềm của bạn như một phần của quy trình làm việc văn phòng và dành thời gian tùy chỉnh cài đặt, đừng xóa cài đặt trong khi gỡ cài đặt.

Từ một quan điểm khác, nếu bạn gỡ cài đặt trò chơi mà bạn đã đánh chìm giờ/ngày/tuần để chơi - bạn có muốn savegames của mình bị xóa không? Các tệp cấu hình tùy chỉnh của bạn? Điều gì về một trò chơi trên một máy tính gia đình được chia sẻ, một người nào đó gỡ cài đặt một trò chơi để giải phóng dung lượng đĩa, không biết rằng một thành viên gia đình khác thường xuyên phát nội dung đó. Bạn có muốn đối phó với những loại khiếu nại đó từ khách hàng của mình không?

+0

>> nếu mọi người dựa vào phần mềm của bạn như là một phần của quy trình làm việc văn phòng của họ và dành thời gian tùy chỉnh cài đặt, đừng xóa cài đặt trong quá trình gỡ cài đặt. << IIRC, đó là (là?) Cũng là một phần của Windows Installer Best Thực tiễn. – DaveE

+0

@ DaveE cảm ơn ... Tôi đã quên nơi tôi đã đọc nó lần đầu tiên :) – saschabeaumont

3

Nếu bạn thực sự muốn có thể loại bỏ dữ liệu người dùng, hãy lưu trữ dữ liệu người dùng trên hệ thống tệp. Một nơi nào đó như "Tài liệu và Cài đặt \ tên người dùng \ Dữ liệu ứng dụng \ Tổ chức của bạn \ Ứng dụng của bạn". Dữ liệu đó sẽ là tầm thường để xóa khi gỡ cài đặt, với mục nhập trong bảng RemoveFile.

Nhóm phát triển Windows Installer đã giải quyết cụ thể vấn đề này trên blog của họ. Xem "Quy tắc 26". http://blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx

Cập nhật:

Nhiều năm trước, tôi đã viết code mà làm những gì bạn mô tả với registry, và nhanh chóng đến hối tiếc. Đó là một nỗi đau, nhưng hơn thế, nó có một vấn đề liên quan đến đặc quyền. Phiên bản ngắn gọn là dịch vụ Trình cài đặt không chạy với tất cả các đặc quyền mà Quản trị viên có. Họ không chỉ bị vô hiệu hóa, họ vắng mặt từ mã thông báo bảo mật của quá trình. Đáng chú ý điều này bao gồm các đặc quyền cần thiết để tải và dỡ bỏ các phát ban registry (se_restore_privilege như tôi nhớ lại). Điều đó làm cho mã bị ngắt để cài đặt và gỡ cài đặt im lặng, ngay cả khi người dùng đang gọi là Quản trị viên và tôi không thể không cho phép cài đặt và gỡ cài đặt im lặng.

Một vấn đề khác chưa xảy ra là Thư mục hoạt động. Tôi không chắc chắn, nhưng tôi nghĩ rằng những gì bạn mô tả sẽ có các vòng bổ sung nghiêm túc để nhảy qua trong môi trường AD.

Nói chung, tôi cố gắng hết sức để tránh việc cài đặt hoặc gỡ cài đặt chạm vào HKCU hive. Tôi đã tìm thấy việc đó để trở thành một nguồn đau đáng kể cho lợi ích tối thiểu.

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