2012-11-09 34 views
5

Tôi có một ứng dụng C# mà các cuộc gọi:Tại sao ứng dụng 32 bit của tôi không truy cập vào tổ chức đăng ký 32 bit?

Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\MyApp")     

Nó được thiết lập để nhắm mục tiêu x86, và khi tôi chạy nó tôi có thể nhìn thấy từ Task Manager mà nó là một quá trình 32-bit. Tuy nhiên, dòng mã đó lạ lẫm đến với tổ hợp 64-bit tại HKCU \ Software \ MyApp, thay vì tổ hợp 32-bit tại HKCU \ Software \ Wow6432Node \ MyApp. Bất kỳ ý tưởng?

Tôi cũng đã bắt đầu hai phiên bản của Powershell, một 32 bit và một bit 64 bit và chạy dưới đây nhưng cả hai đều trả về giá trị tại tổ hợp 64 bit.

get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

Bất kỳ ý tưởng nào có thể xảy ra ở đây? Tôi đã kiểm tra ba lần rằng các thiết lập đăng ký tại 32 và 64 bit phát ban là khác nhau từ regedit quá.

+0

Có thể là CRL phát hiện rằng bạn đang sử dụng trình biên dịch 64 bit và đi tổ ong đó. Chỉ là một đoán mặc dù !! – FrostyFire

Trả lời

4

Vì bạn đang truy cập khóa (HKCU \ Software) được chia sẻ, không được chuyển hướng. Xem http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx và (cụ thể hơn) http://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx

Từ mắt xích đầu tiên (tôi nhấn mạnh):

Ngày 64-bit Windows, phần của các khóa registry được lưu trữ riêng cho các ứng dụng 32-bit và Các ứng dụng 64 bit và được ánh xạ vào các chế độ xem đăng ký logic riêng biệt bằng cách sử dụng trình đăng ký đăng ký và phản ánh đăng ký , vì phiên bản 64 bit của ứng dụng có thể sử dụng các khóa và giá trị đăng ký khác với phiên bản 32 bit. Có cũng là các khóa đăng ký được chia sẻ không được chuyển hướng hoặc phản ánh.

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