2009-05-01 38 views
25

Ứng dụng khách của chúng tôi (một ứng dụng winforms) bao gồm một trình duyệt tập tin. Tôi muốn người dùng có thể mở tệp đã chọn bằng trình xử lý mặc định của trình bao. Làm thế nào để làm điều đó? Tôi đã đọc mà tôi nên sử dụng API Win32 hơn là đăng ký, nhưng tôi muốn một giải pháp mà chỉ liên quan đến .NET.Làm cách nào để mở tệp bằng trình xử lý mặc định của trình bao?

Trả lời

54

EDIT nó: Mới hơn, câu trả lời đơn giản hơn.

Bạn thực sự có thể chỉ sử dụng Process.Start(filename). Đây là quy định trong docs for Process.Start:

Bắt đầu một quá trình bằng cách xác định tên tập tin của nó cũng tương tự như cách gõ thông tin trong hộp thoại Run của menu Start của Windows. Do đó, tên tệp không cần phải đại diện cho tệp thi hành. Nó có thể là bất kỳ loại tệp nào mà tiện ích mở rộng có được liên kết với ứng dụng được cài đặt trên hệ thống. Ví dụ: tên tệp có thể có đuôi .txt nếu bạn có văn bản liên kết tệp với trình chỉnh sửa, chẳng hạn như Notepad, hoặc có thể có .doc nếu bạn có tệp.doc được liên kết với từ công cụ xử lý , chẳng hạn như Microsoft Word. Tương tự, trong cùng một cách mà hộp thoại Chạy có thể chấp nhận tên tệp thực thi có hoặc không có phần mở rộng .exe, phần mở rộng .exe là tùy chọn trong thông số tên tệp. Ví dụ: Ví dụ, bạn có thể đặt tham số fileName thành "Notepad.exe" hoặc "Notepad".

EDIT: Original, câu trả lời phức tạp:

Nếu bạn sử dụng Process.Start với các tập tin như là "thực thi" và chỉ định UseShellExecute = true nó sẽ chỉ làm việc. Ví dụ:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ProcessStartInfo psi = new ProcessStartInfo("test.txt"); 
     psi.UseShellExecute = true; 
     Process.Start(psi); 
    } 
} 

Điều đó mở test.txt trong Notepad.

Thực tế, UseShellExecute=true là mặc định, nhưng vì nó chắc chắn là bắt buộc, tôi muốn chỉ định rõ ràng để làm rõ hơn cho người đọc.

+0

'Process.Start (" C: \ temp \ test.xlsx ");' mở tệp *** xlsx *** nếu ** Excel được cài đặt **. Nếu không được cài đặt, tôi không biết. – Kiquenet

6

không chắc chắn nếu ok

System.Diagnostics.Process.Start(filePath); 
2

System.Diagnostics.Process cung cấp trình bao bọc gốc Net. Xung quanh shell32.ShellExecute.

Xem PInvoke.Net để thảo luận về cả API và tài liệu MSDN trên MSDN.

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