c # mở tệp với ứng dụng và thông số mặc định


103

Cách dễ dàng nhất để mở tệp bằng ứng dụng mặc định là:

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

Tuy nhiên, tôi muốn biết liệu có tồn tại cách đặt các thông số cho ứng dụng mặc định hay không, vì tôi muốn mở một pdf ở số trang xác định.

Tôi biết cách tạo một quy trình mới và thiết lập các thông 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ó một ứng dụng di động và không phải đặt đường dẫn của ứng dụng mỗi lần. Tôi sử dụng ứng dụng trong máy tính khác. Ý tưởng của tôi là tôi mong đợi rằng máy tính đã cài đặt trình đọc pdf và chỉ nói những gì để mở trang.

Cảm ơn.


Ý của bạn là gửi các tham số đến tệp thực thi Adobe thay vì tệp pdf, nhưng không sử dụng đường dẫn đầy đủ?
Bali C

2
Bạn mong đợi điều này hoạt động 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 đâu là trình xem PDF mặc định và bạn không biết sử dụng định dạng tham số nào.
ken2k

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

1
Hãy xem câu hỏi SO này để xem nó hữu ích
Mark Hall

2
@daniloquio: Tôi nghĩ vấn đề là OP không biết người dùng cuối đã cài đặt thứ gì trên máy của họ để đọc các tệp adobe, nó có thể là Acrobat, Acrobat Reader hoặc thứ gì khác.
Surfbutler

Câu trả lời:


43

Nếu bạn muốn tệp được mở bằng ứng dụng mặc định, ý tôi là nếu không chỉ định Acrobat hoặc Reader, bạn không thể mở tệp trong trang được chỉ định.

Mặt khác, nếu bạn đồng ý với việc chỉ định Acrobat hoặc Reader, hãy tiếp tục đọc:


Bạn có thể làm điều đó mà không cần nói đường dẫn 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 bằng Acrobat, hãy mở dòng thứ hai như sau:

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

Bạn có thể truy vấn sổ đă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 của bạn cho phù hợp.

Hãy làm theo câu hỏi này để biết chi tiết về cách thực hiện điều đó: Tìm ứng dụng mặc định để mở một loại tệp cụ thể trên Windows


2
+1 Ngoài ra, tôi nghĩ có thể tra cứu ứ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 đó trong tham số tên tệp. Xem stackoverflow.com/questions/162331/…
Surfbutler,

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

18

điều này nên được gần!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}

1
Thật hoàn hảo!
Francois Girard

1
Điều này phù hợp với tôi khi mở tệp PDF bằng chương trình mặc định. Cảm ơn bạn!
Smitty-Werben-Jager-Manjenson

1
@imgen câu hỏi là về việc cung cấp số trang làm tham số. Câu trả lời này có bao hàm điều đó không?
daniloquio

1
@daniloquio xin lỗi, tôi chưa đọc đủ sâu câu hỏi.
imgen

2
Đừng quên gói nó trong một khối sử dụng, Quy trình là IDisposable.
René Carannante

7

Tôi đã chuyển đổi mã VB trong bài đăng trên blog được liên kết bởi xsl thành 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();
    }
}

CHỈNH SỬA - điều này là không đáng tin cậy. Xem phần Tìm ứng dụng mặc định để mở một loại tệp cụ thể trên Windows .


3

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

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

-5

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

Cách thực hiện: Tạo một cài đặt mới vào thời điểm thiết kế

Cập nhật: sau khi bình luận bên dưới

  1. Phải + Nhấp vào dự án
  2. Thêm mục mới
  3. Trong mục Visual C # -> Chung
  4. Chọn tệp cài đặt

14
Có thể sai tab? ;)
ken2k
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.