2012-01-12 37 views
6

Tôi cần liên kết phần mở rộng tệp Tôi đã tạo ".rulog" với notepad.exe như một phần của cài đặt dự án thiết lập cho máy tính Windows 7 (nó ở đây vì chúng tôi yêu cầu đặc quyền quản trị để ghi vào sổ đăng ký).Cách lấy đường dẫn chính xác của notepad.exe để liên kết phần mở rộng tệp

Về cơ bản, tôi cần có được đường dẫn chính xác của notepad.exe. Bây giờ, tôi hiểu rằng nó thường sống trong C: \ Windows \ system32. Đây là một phần của biến môi trường hệ thống PATH, vì vậy tôi đoán tôi có thể lặp qua tất cả các biến PATH và kiểm tra nếu "notepad.exe" tồn tại bằng cách kết hợp "notepad.exe" với đường dẫn hiện tại bằng cách sử dụng File.Exists. Tuy nhiên điều này cảm thấy rất vụng về.

Về cơ bản tôi cần phải thêm một mục vào

Computer\HKEY_CLASSES_ROOT\.rulog\shell\open\command\ 

với giá trị của con đường của notepad.

Ngẫu nhiên tôi có thể thấy rằng trong .txt:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

có giá trị cho ITEMNAME của

“@%SystemRoot%\system32\notepad.exe,-470” 

Có lẽ tôi chỉ có thể sao chép giá trị này? Hoặc điều này có nguy hiểm không? (Ví dụ: không tồn tại).

+1

Ra khỏi tò mò, tại sao một số nhà phát triển nhấn mạnh vào việc tạo ra các phần mở rộng tập tin đắn riêng của họ cho một cái gì đó đơn giản như một tập tin văn bản? – KingCronus

+1

Ngoài sự tò mò, nếu bạn biết rằng notepad có thể mở tệp của bạn, tại sao không sử dụng phần mở rộng tệp hiện có tương đương? – murgatroid99

+0

Rất có khả năng một ứng dụng sẽ được viết sẽ tìm kiếm thư mục cho các loại tệp này. Chúng tôi đã có .txt/.log hiện có cho các thông tin đăng nhập/khác vì vậy đây chỉ là một điều khoản cho nó. – Jeb

Trả lời

8

Bạn có thể sử dụng:

Environment.GetEnvironmentVariable("windir") + "\\system32\\notepad.exe"; 

Hoặc thậm chí dễ dàng hơn:

Environment.SystemDirectory + "\\notepad.exe"; 

Bằng cách đó nó không quan trọng mà lái os là trên.

3

Sao chép giá trị bằng% systemroot% sẽ ổn. Nếu nó hoạt động cho hệ điều hành, nó sẽ làm việc cho bạn!

0

fool-proof giải pháp:

string NotepadPath = Environment.SystemDirectory + "\\notepad.exe"; 
if (System.IO.File.Exists(NotepadPath)) 
{ 
    Microsoft.Win32.Registry.SetValue("HKEY_CLASSES_ROOT\\.rulog\\shell\\open\\command\\", "", NotepadPath + " %1"); 
} 
else 
{ 
    //do something else or throw new ApplicationException("Notepad not found!"); 
} 
Các vấn đề liên quan