2008-08-03 20 views
15

Tôi đang cố gắng duy trì một Dự án Thiết lập trong Visual Studio 2003 (có, đó là một ứng dụng kế thừa). Vấn đề chúng ta có tại thời điểm này là chúng ta cần phải ghi các mục đăng ký vào HKCU cho mọi người dùng trên máy tính. Họ cần phải ở trong số HKCU thay vì HKLM vì chúng là cài đặt người dùng mặc định và chúng thay đổi theo người dùng. Cảm giác của tôi làDự án Thiết lập Visual Studio - Mỗi Cài đặt Đăng ký Người dùng

  1. này là không thể
  2. Đây không phải là một cái gì đó trình cài đặt nên làm, nhưng một cái gì đó ứng dụng nên làm (sau khi tất cả những gì xảy ra khi một user profile được tạo ra sau khi cài đặt ?).

Với ý nghĩ đó, tôi vẫn muốn thay đổi càng ít càng tốt trong việc áp dụng, vì vậy câu hỏi của tôi là, là nó có thể để thêm mục đăng ký cho mỗi người dùng trong một dự án Visual Studio 2003 thiết lập?

Và tại thời điểm này, dự án liệt kê năm khóa gốc của đăng ký (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS và Người dùng/Máy tổ chức). Tôi không thực sự biết gì về khóa gốc của người dùng, và chưa thấy User/Machine Hive. Bất cứ ai có thể khai sáng cho tôi về những gì họ đang có? Có lẽ họ có thể giải quyết vấn đề của tôi ở trên.

+0

cảm ơn câu hỏi này –

Trả lời

5

Đầu tiên: Vâng, đây là cái gì đó thuộc về các ứng dụng cho reson chính xác mà bạn quy định: Điều gì xảy ra sau khi hồ sơ người dùng mới được tạo ra? Chắc chắn, nếu bạn đang sử dụng một tên miền nó có thể có một số công cụ đặt trong registry về sáng tạo, nhưng điều này không thực sự là một trường hợp sử dụng. Ứng dụng nên kiểm tra xem có seetings và sử dụng các thiết lập mặc định nếu không.

Điều đó đang được nói, có thể thay đổi người dùng khác Các phím thông qua HKEY_USERS Hive.

Tôi không có kinh nghiệm với Visual Thiết lập dự án Studio 2003, vì vậy đây là một chút (hoàn toàn không liên quan) mã VBScript mà chỉ có thể cung cấp cho bạn một ý tưởng nơi để xem xét:

const HKEY_USERS = &H80000003 
strComputer = "." 
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "" 
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys 
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing" 
For Each subkey In arrSubKeys 
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944 
Next 

(Mã Courtesy of Jeroen Ritmeijer)

1

Tôi đang tham gia giải pháp của mình với mục nhập này trên MSDN (không biết cách tôi không thể tìm thấy trước đó).

tài khoản/máy Hive
Subkeys và giá trị nhập dưới hive này sẽ được cài đặt dưới hive HKEY_CURRENT_USER khi người dùng chọn "Just me" hay hive HKEY_USERS hoặc khi người dùng chọn "Mọi người" trong khi cài đặt.

Registry Editor

5

Tôi đoán rằng vì bạn muốn đặt nó cho tất cả người dùng, rằng bạn đang sử dụng một loại máy tính dùng chung nào đó, có lẽ đang chạy dưới một miền?

HERE BE DRAGONS

Hãy nói rằng Joe và Jane thường xuyên đăng nhập vào máy tính, sau đó họ sẽ từng có 'đăng ký'.

Sau đó, bạn sẽ cài đặt ứng dụng của mình và trình cài đặt sẽ sử dụng các công cụ hacking khổng lồ và kinh tởm để đặt các mục theo HKCU cho chúng.

THEN, bob sẽ đến và đăng nhập (anh ấy và 500 người khác có tài khoản trong miền và do đó có thể thực hiện việc này). Anh ấy chưa bao giờ sử dụng máy tính này trước đây, vì vậy anh ta không có đăng ký. Lần đầu tiên anh ta đăng nhập, cửa sổ tạo ra anh ta, nhưng anh ta sẽ không có cài đặt của bạn.

Ứng dụng của bạn sau đó rơi xuống hoặc hoạt động không chính xác và bob phàn nàn lớn về các sản phẩm crappy đó từ việc kết hợp raynixon.

Câu trả lời đúng là chỉ có một số cài đặt mặc định trong ứng dụng của bạn, có thể ghi chúng vào sổ đăng ký nếu ứng dụng không tìm thấy chúng. Đó là thực hành tốt nói chung rằng ứng dụng của bạn không bao giờ nên phụ thuộc vào đăng ký, và nên tạo ra những thứ cần thiết, cho bất kỳ mục đăng ký, không chỉ HKCU, anyway

1

Mặc dù những gì MSDN article nói về User/Machine Hive, nó không viết thư cho HKEY_USERS. Thay vào đó nó ghi vào HKCU nếu bạn chọn Just Me và HKLM nếu bạn chọn tất cả mọi người.

Vì vậy, giải pháp của tôi sẽ sử dụng User/Machine Hive, và sau đó trong ứng dụng nó kiểm tra nếu các mục đăng ký trong HKCU và nếu không, sao chép chúng từ HKLM. Tôi biết điều này có lẽ không phải là cách lý tưởng nhất để làm điều đó, nhưng nó có số lượng thay đổi ít nhất.