c # varsayılan uygulama ve parametrelerle açık dosya


107

Varsayılan uygulamayla bir dosya açmanın en kolay yolu şudur:

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

Bununla birlikte, parametreleri varsayılan uygulamaya ayarlamanın bir yolu olup olmadığını bilmek istiyorum, çünkü belirli bir sayfa numarasında bir pdf açmak istiyorum.

Yeni bir süreç oluşturmayı ve parametreleri ayarlamayı nasıl yapacağımı biliyorum, ancak bu şekilde uygulamanın yolunu belirtmem gerekiyor ve taşınabilir bir uygulamaya sahip olmak ve her seferinde uygulamanın yolunu ayarlamak zorunda kalmamak istiyorum. Uygulamayı başka bir bilgisayarda kullanıyorum. Benim fikrim, bilgisayarın pdf okuyucuyu yüklemiş olmasını ve sadece sayfanın ne açılacağını söylemesidir.

Teşekkürler.


Parametreleri pdf dosyası yerine Adobe yürütülebilir dosyasına, ancak tam yolu kullanmadan mı göndermek istiyorsunuz?
Bali C

2
Bunun nasıl çalışmasını bekliyorsunuz? Uygulamanın yolunu bilmiyorsanız, hangisinin varsayılan PDF görüntüleyici olduğunu ve hangi parametre formatını kullanacağınızı bilemezsiniz.
ken2k

2
myProcess.StartInfo.FileName = "Acrobat.exe";Başvurunun tam yolunu vermeden söylemek yeterli değil mi?
daniloquio

1
Yardımcı olduğunu görmek için bu SO sorusuna bir göz atın
Mark Hall

2
@daniloquio: Bence asıl mesele, OP'nin son kullanıcının adobe dosyalarını okumak için makinesine ne yüklediğini bilmemesi, Acrobat, Acrobat Reader veya başka bir şey olabilir.
Surfbutler

Yanıtlar:


46

Dosyanın varsayılan uygulama ile açılmasını istiyorsanız yani Acrobat veya Reader belirtmeden dosyayı belirtilen sayfada açamazsınız.

Öte yandan, Acrobat veya Reader'ı belirlemekte sorun yoksa okumaya devam edin:


Bunu, aşağıdaki gibi tam Acrobat yolunu söylemeden yapabilirsiniz:

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

PDF'nin Reader ile ancak Acrobat ile açılmasını istemiyorsanız, ikinci satırı şu şekilde takip edin:

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

Pdf dosyalarını açmak için varsayılan uygulamayı tanımlamak için kayıt defterini sorgulayabilir ve ardından işleminizin StartInfo'unda buna göre DosyaAdı tanımlayabilirsiniz.

Bunu yapmakla ilgili ayrıntılar için şu soruyu takip edin: Windows'ta belirli bir dosya türünü açmak için varsayılan uygulamayı bulma


2
+1 Ayrıca, kayıt defterinde '.pdf' gibi herhangi bir dosya türüyle ilişkili uygulamayı arayıp sonra bu adı dosya adı parametresine koymanın mümkün olduğunu düşünüyorum. Stackoverflow.com/questions/162331/… sayfasına
Surfbutler

Adobe okuyucunun 2 sayfalık görünümde açılmasını sağlamak için açık bir parametre var mı? Merak ediyorum, eğer birisi bilirse, bu gerçekten yararlı olur. Etrafa bakıyordum ama hiçbir şey bulamıyorum.
taki Martillo

23

bu yakın olmalı!

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

1
Bu mükemmel !
Francois Girard

1
Bu, PDF'leri varsayılan programla açmak için benim için çalıştı. Teşekkür ederim!
Smitty-Werben-Jager-Manjenson

1
@imgen soru, sayfa numarasını bir param olarak sağlamakla ilgilidir. Bu cevap bunu kapsıyor mu?
daniloquio

1
@daniloquio üzgünüm, soruyu yeterince derinlemesine okumadım.
imgen

3
Kullanan bir bloğa sarmayı unutmayın, İşlem IDisposable.
René Carannante

7

Xsl ile C # ile bağlantılı blog gönderisindeki VB kodunu dönüştürdüm ve biraz değiştirdim:

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

DÜZENLEME - bu güvenilmez. Windows'ta belirli bir dosya türünü açmak için varsayılan uygulamayı bulma konusuna bakın .


3

ile deneyebilirsin

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

-5

Lütfen Proje Özellikleri'nin altına Ayarlar ekleyin ve bunları bu şekilde kullanın, varsayılan olarak yapılandırılabilen temiz ve kolay yapılandırılabilir ayarlara sahip olursunuz.

Nasıl Yapılır: Tasarım Zamanında Yeni Bir Ayar Oluşturma

Güncelleme: aşağıdaki yorumlardan sonra

  1. Sağ + Projeye tıklayın
  2. Yeni öğe ekle
  3. Görsel C # Öğeleri altında -> Genel
  4. Ayarlar Dosyasını Seçin

14
Yanlış sekme belki? ;)
ken2k
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.