2012-07-06 27 views
65

Cách dễ dàng nhất để mở một tập tin với các ứng dụng mặc định là:C# tập tin mở với ứng dụng mặc định và thông số

System.Diagnostics.Process.Start(@"c:\myPDF.pdf"); 

Tuy nhiên, tôi muốn biết nếu tồn tại một cách để thiết lập các thông số cho các ứng dụng mặc định , bởi vì tôi muốn mở một pdf trong một số trang xác định.

Tôi biết làm cách nào để tạo quy trình mới và đặt tham số, nhưng theo cách này, tôi cần chỉ ra đường dẫn của ứng dụng và tôi muốn có ứng dụng di động và không phải đặt đường dẫn của các ứng dụng mỗi khi tôi sử dụng ứng dụng trong máy tính khác. Ý tưởng của tôi là tôi hy vọng rằng máy tính đã cài đặt trình đọc pdf và chỉ nói trang nào đang mở.

Cảm ơn.

+0

Bạn có nghĩa là gửi tham số cho tệp thi hành Adobe chứ không phải tệp pdf, nhưng không sử dụng đường dẫn đầy đủ? –

+2

Bạn mong đợi điều này như thế nào? Nếu bạn không biết đường dẫn của ứng dụng, bạn không biết đó là trình xem PDF mặc định và bạn không biết định dạng thông số nào sẽ được sử dụng. – ken2k

+1

Không đủ để nói 'myProcess.StartInfo.FileName =" Acrobat.exe ";' mà không đưa ra đường dẫn đầy đủ đến ứng dụng? – daniloquio

Trả lời

34

EDIT (nhờ surfbutler bình luận trong câu hỏi ý kiến) Nếu bạn muốn mở tệp bằng ứng dụng mặc định, ý tôi là không chỉ định Acrobat hoặc Reader, bạn không thể mở tệp trong thông số trang ified.

Mặt khác, nếu bạn là Ok với quy định cụ thể Acrobat hoặc Reader, tiếp tục đọc:


Bạn có thể làm điều đó mà không nói cho con đường Acrobat đầy đủ, như thế này:

Process myProcess = new Process();  
myProcess.StartInfo.FileName = "acroRd32.exe"; //not the full application path 
myProcess.StartInfo.Arguments = "/A \"page=2=OpenActions\" C:\\example.pdf"; 
myProcess.Start(); 

Nếu bạn không muốn pdf mở bằng Reader nhưng với Acrobat, hãy thêm vào dòng thứ hai như sau:

myProcess.StartInfo.FileName = "Acrobat.exe"; 

EDIT SECOND: Tìm ứng dụng mặc định cho phần mở rộng pdf

Bạn có thể truy vấn đăng ký để xác định ứng dụng mặc định để mở tệp pdf và sau đó xác định Tên tệp trên StartInfo của quy trình tương ứng.Again, thanks surfbutler for your comment :)

theo câu hỏi này để biết chi tiết về làm điều đó: Finding the default application for opening a particular file type on Windows

+2

+1 Ngoài ra tôi nghĩ rằng có thể tìm kiếm ứng dụng được liên kết với bất kỳ loại tệp nào, ví dụ: '.pdf' trong sổ đăng ký, sau đó đặt tên đó vào tham số tên tệp. Xem http://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-file-type-on-windows?rq=1 – Surfbutler

+0

Có một số thông số mở để có được trình đọc Adobe hay không để mở ở chế độ xem 2 trang? Chỉ cần tò mò, nếu ai đó biết, đó sẽ là thực sự hữu ích. Tôi đã nhìn xung quanh, nhưng tôi không thể tìm thấy bất cứ điều gì. –

3

bạn có thể thử với

Process process = new Process(); 
process.StartInfo.FileName = "yourProgram.exe"; 
process.StartInfo.Arguments = ..... //your parameters 
process.Start(); 
-4

Vui lòng thêm Cài đặt dưới Properties cho dự án và sử dụng chúng theo cách này, bạn có các cài đặt sạch và dễ dàng cấu hình có thể được cấu hình như mặc định

How To: Create a New Setting at Design Time

Cập nhật: sau khi nhận xét bên dưới

  1. phải + Nhấp vào dự án
  2. Add New Item
  3. Dưới Visual C Items # -> General
  4. Chọn Cài đặt tập tin
+9

Tab sai có thể? ;) – ken2k

7

tôi chuyển đổi mã VB trong bài viết trên blog được liên kết bởi xsl đến C# và sửa đổi nó một chút:

public static bool TryGetRegisteredApplication(
        string extension, out string registeredApp) 
{ 
    string extensionId = GetClassesRootKeyDefaultValue(extension); 
    if (extensionId == null) 
    { 
     registeredApp = null; 
     return false; 
    } 

    string openCommand = GetClassesRootKeyDefaultValue(
      Path.Combine(new[] {extensionId, "shell", "open", "command"})); 

    if (openCommand == null) 
    { 
     registeredApp = null; 
     return false; 
    } 

    registeredApp = openCommand 
        .Replace("%1", string.Empty) 
        .Replace("\"", string.Empty) 
        .Trim(); 
    return true; 
} 

private static string GetClassesRootKeyDefaultValue(string keyPath) 
{ 
    using (var key = Registry.ClassesRoot.OpenSubKey(keyPath)) 
    { 
     if (key == null) 
     { 
      return null; 
     } 

     var defaultValue = key.GetValue(null); 
     if (defaultValue == null) 
     { 
      return null; 
     } 

     return defaultValue.ToString(); 
    } 
} 

EDIT - đây không đáng tin cậy. Xem Finding the default application for opening a particular file type on Windows.

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