c # buka file dengan aplikasi dan parameter default

103

Cara paling mudah untuk membuka file dengan aplikasi default adalah:

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

Namun, saya ingin tahu apakah ada cara untuk mengatur parameter ke aplikasi default, karena saya ingin membuka pdf dalam nomor halaman yang ditentukan.

Saya tahu bagaimana melakukannya membuat proses baru dan mengatur parameter, tetapi dengan cara ini saya perlu menunjukkan jalur aplikasi, dan saya ingin memiliki aplikasi portabel dan tidak harus mengatur jalur aplikasi setiap kali Saya menggunakan aplikasi di komputer lain. Ide saya adalah bahwa saya berharap komputer telah menginstal pembaca pdf dan hanya mengatakan apa yang harus dibuka halaman.

Terima kasih.

Álvaro García
sumber
Apakah maksud Anda mengirim parameter ke Adobe yang dapat dieksekusi daripada file pdf, tetapi tanpa menggunakan jalur lengkap?
Bali C
2
Bagaimana Anda mengharapkan ini bekerja? Jika Anda tidak mengetahui jalur aplikasi, Anda tidak tahu mana yang merupakan penampil PDF default, dan Anda tidak tahu format parameter mana yang akan digunakan.
ken2k
2
Tidak cukup mengatakan myProcess.StartInfo.FileName = "Acrobat.exe";tanpa memberikan path lengkap ke aplikasi?
daniloquio
1
Lihatlah pertanyaan SO ini untuk melihat ada gunanya
Mark Hall
2
@daniloquio: Saya pikir intinya adalah bahwa OP tidak tahu apa yang telah diinstal pengguna akhir di mesinnya untuk membaca file adobe, bisa jadi Acrobat, Acrobat Reader, atau yang lainnya.
Surfbutler

Jawaban:

43

Jika Anda ingin file dibuka dengan aplikasi default, maksud saya tanpa menentukan Acrobat atau Reader, Anda tidak dapat membuka file di halaman yang ditentukan.

Di sisi lain, jika Anda baik-baik saja dengan menentukan Acrobat atau Reader, teruslah membaca:


Anda dapat melakukannya tanpa memberi tahu jalur Acrobat lengkap, seperti ini:

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();

Jika Anda tidak ingin pdf terbuka dengan Reader tetapi dengan Acrobat, ubah baris kedua seperti ini:

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

Anda dapat meminta registri untuk mengidentifikasi aplikasi default untuk membuka file pdf dan kemudian menentukan Nama File pada StartInfo proses yang sesuai.

Ikuti pertanyaan ini untuk mengetahui detailnya: Menemukan aplikasi default untuk membuka jenis file tertentu di Windows

daniloquio
sumber
2
+1 Juga saya pikir itu mungkin untuk mencari aplikasi yang terkait dengan jenis file apa pun misalnya '.pdf' di registri, kemudian masukkan nama itu di parameter nama file. Lihat stackoverflow.com/questions/162331/…
Surfbutler
Apakah ada beberapa parameter terbuka agar Adobe reader dibuka dalam tampilan 2 halaman? Hanya penasaran, jika ada yang tahu, itu akan sangat berguna. Saya telah melihat-lihat, tetapi saya tidak dapat menemukan apa pun.
taki Martillo
18

ini harus dekat!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}
Jessie Lesbian
sumber
1
Itu sempurna !
Francois Girard
1
Ini berhasil bagi saya untuk membuka PDF dengan program default. Terima kasih!
Smitty-Werben-Jager-Manjenson
1
@imgen pertanyaannya adalah tentang memberikan nomor halaman sebagai parameter. Apakah jawaban ini mencakup itu?
daniloquio
1
@daniloquio maaf, saya tidak membaca cukup dalam pertanyaannya.
imgen
2
Jangan lupa untuk membungkusnya dalam blok using, Process is IDisposable.
René Carannante
7

Saya mengonversi kode VB di posting blog yang ditautkan oleh xsl ke C # dan mengubahnya sedikit:

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 - ini tidak bisa diandalkan. Lihat Menemukan aplikasi default untuk membuka jenis file tertentu di Windows .

Ohad Schneider
sumber
3

Anda bisa mencoba dengan

Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();
Aghilas Yakoub
sumber
-5

Silakan tambahkan Pengaturan di bawah Properti untuk Proyek dan gunakan dengan cara ini Anda memiliki pengaturan yang bersih dan mudah dikonfigurasi yang dapat dikonfigurasi sebagai default

Cara: Membuat Setting Baru pada Waktu Desain

Pembaruan: setelah komentar di bawah

  1. Kanan + Klik pada proyek
  2. Tambahkan Item Baru
  3. Di bawah Visual C # Item -> General
  4. Pilih File Pengaturan
HatSoft
sumber
14
Tab yang salah mungkin? ;)
ken2k