2010-09-01 32 views
7

Tôi đang đề cập cụ thể đến các cửa sổ 7.Windows 7 tập tin mở rộng liên kết

tôi có mã liên kết một phần mở rộng nhất định với ứng dụng của tôi theo đề nghị của webJose ở trang sau: What registry keys are responsible for file extension association? (Tuy nhiên tôi viết một cách chính xác đến HKEY_CURRENT_USER \ Software \ Classes thay vì HKEY_CLASSES_ROOT như gợi ý)

Các tác phẩm trên ban đầu, hoặc nếu không có chương trình nào khác liên quan đến phần mở rộng. Tuy nhiên sau khi sử dụng Windows 7 được tích hợp sẵn "Chọn chương trình mặc định ..." (được tìm thấy trong trình đơn ngữ cảnh nhấp chuột phải trong "Mở bằng"), nó sẽ liên kết lại phần mở rộng với bất kỳ chương trình mới nào bạn chọn.

Điều gì xảy ra tại thời điểm này là "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \\ UserChoice" được thay đổi bởi hệ thống và do đó chương trình mới được chọn sẽ tiếp quản.

Chạy mã trên, để lấy lại quyền kiểm soát tiện ích sẽ không hoạt động. Cách duy nhất để lấy lại quyền kiểm soát, bằng một trong hai cách:

  1. Chỉnh sửa UserChoice -> Giá trị Progid, không được phép (không lập trình cũng không sử dụng regedit.exe - truy cập bị từ chối).
  2. Hoặc xóa các giá trị lựa chọn của người và đảm bảo ứng dụng của bạn là người đầu tiên trong giá trị MRUList dưới \ OpenWithList (điều này có thể đạt được bằng regedit.exe nhưng không lập trình)

Câu hỏi của tôi là: Có cách nào để đạt được điều này theo chương trình? Giá trị đăng ký nào có thể được thay đổi để lấy lại quyền kiểm soát tiện ích, sau khi được kết hợp với một chương trình khác?

Tôi biết có thể rõ ràng rằng nếu người dùng thông qua trình khám phá đặt ứng dụng được liên kết thành tiện ích mở rộng, nó sẽ được thực hiện lại theo cách tương tự để liên kết lại tiện ích với ứng dụng khác.

Tuy nhiên, vấn đề là tôi có một nút trong ứng dụng sử dụng mã được đề cập ở trên để kiểm tra liên kết tiện ích mở rộng với ứng dụng của tôi. Thật không may với tình hình trên, ứng dụng của tôi hiển thị một thông báo xác nhận rằng phần mở rộng đã được liên kết thành công khi nó không được! Vì vậy, có một cách xung quanh này?

Trả lời

4

Xóa UserChoice sẽ hoàn nguyên chương trình mặc định thành các khóa liên kết tệp chuẩn (bắt đầu bằng ProgID trong HKCU). Chặn rằng bạn cũng có thể xóa OpenWithList, điều này sẽ hoàn nguyên với định kiến ​​cực đoan.

Edit: Check-out Registry Key Security and Access Rights trên MSDN, đặc biệt là RegSetKeySecurity chức năng. Hãy nhớ rằng bạn sẽ cần phải tự kiểm soát quản trị cho khóa trước khi có thể xóa nó.

+0

Bạn không thể xóa khóa theo bất kỳ cách nào theo chương trình, ngay cả khi người quản trị viết. Đó là lý do cho câu hỏi trên của tôi, làm thế nào tôi có thể xóa nó? – Tamer

+0

Đó là một tính đặc thù của hệ thống của bạn, không phải là một tiêu chuẩn Windows. Một số phần mềm bạn đã cài đặt đã thay đổi mã khóa trên khóa để ngăn bạn thay đổi nó ... có thể là bất cứ điều gì đã tự đăng ký trong UserChoice. Tuy nhiên, bạn có thể tự cấp quyền truy cập cho mình, sau đó xóa nó. –

+0

Bạn có thể xác nhận điều này không? Bây giờ tôi đã thử điều này trên một số máy chạy ứng dụng với tư cách quản trị viên. Truy cập vào khóa cụ thể "UserChoice" bị từ chối theo lập trình (không phải viết và xóa). Bạn đang nói rằng u có thể lập trình chỉnh sửa các giá trị của khóa này trên máy ur? Ai đó có thể vui lòng xác nhận điều này? – Tamer

2

Cũng liên quan đến tệp assoc trong Window 7 mới 'vấn đề' được nâng cấp.

Đó là một trong số này: Bạn đã đấu tranh vì quyền lợi của mình.

Giả sử bạn muốn chạy

REG.exe DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov\UserChoice" /f /va 

Bạn sẽ nhận được TRUY CẬP DENYED. Khi bạn kiểm tra thiết lập bảo mật của khóa trong Regedit 'UserChoice' bạn sẽ thấy rằng có một cửa sổ thiết lập được tạo cho bạn, để từ chối 'set' cho người dùng hiện tại. Vâng, bạn có thể thay đổi/xóa thiết lập này trong regedit và bây giờ bạn có thể xóa UserChoice. Tuy nhiên đối với lập trình viên/scripters rằng thiết lập là một chút bitchy kể từ bây giờ có những công cụ thực sự để thiết lập ACLs trong sổ đăng ký. Tuy nhiên ở đây một số cách giải quyết mà tại cho phép xóa các phím với TRUY CẬP DENYED (công trình dĩ nhiên chỉ trong trường hợp này bạn đã có quyền thay đổi quyền):

ResetMovAssoc.cmd

::create 'empty.hiv' 
REG ADD "HKCU\emptyKey" /f 
REG SAVE "HKCU\emptyKey" empty.hiv /y 
@REG DELETE "HKCU\emptyKey" /f >nul 
::^-note you can add @[...] >nul to the other entries as well to run them quite 

:: Delete Reg key by replacing it with an empty hiv 
REG RESTORE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov" empty.hiv 
del empty.hiv 

Để tóm tắt này điều quan trọng ở đây là REG RESTORE + tệp hive Registry chứa khóa chỉ và trống. Trong Regedit sẽ tương đương với Nhập 'chỉ với một tệp cấu trúc sổ đăng ký trống (Lưu ý: đó là tệp hive chứ không phải tệp * .reg).

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