2012-07-06 10 views
65

najbardziej prosty sposób, aby otworzyć plik z domyślnej aplikacji jest:C# Otwórz plik z domyślnymi parametrami nakładania i

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

Jednak chciałbym wiedzieć, czy istnieje sposób, aby ustawić parametry do domyślnej aplikacji , ponieważ chciałbym otworzyć pdf w ustalonym numerze strony.

Wiem, jak to zrobić, tworząc nowy proces i ustawić parametry, ale w ten sposób muszę wskazać ścieżkę aplikacji i chciałbym mieć przenośną aplikację i nie musieć ustawiać ścieżkę aplikacji za każdym razem, gdy korzystam z aplikacji na innym komputerze. Moim pomysłem jest, że spodziewam się, że komputer zainstalował czytnik pdf i mówi tylko, która strona jest otwarta.

Dzięki.

+0

Czy chodzi ci o przesłanie parametrów do pliku wykonywalnego Adobe zamiast do pliku pdf, ale bez korzystania z pełnej ścieżki? –

+2

Jak można się spodziewać, że to zadziała? Jeśli nie znasz ścieżki aplikacji, nie wiesz, która jest domyślną przeglądarką plików PDF i nie wiesz, jakiego formatu parametru użyć. – ken2k

+1

Nie wystarczy powiedzieć "myProcess.StartInfo.FileName =" Acrobat.exe ";' bez podania pełnej ścieżki do aplikacji? – daniloquio

Odpowiedz

34

EDIT (dzięki surfbutler komentarza w pytaniu komentarze) Jeśli chcesz, aby plik został otwarty z domyślną aplikacją, mam na myśli bez określenia Acrobat lub Reader, nie możesz otworzyć pliku w specyfikacji strona ified.

Z drugiej strony, jeśli są OK, z określeniem Acrobat lub Reader, czytaj dalej:


Można to zrobić bez mówienia pełną ścieżkę Acrobat, tak:

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

Jeśli nie chcesz, aby plik PDF otwierał się w programie Reader, ale w programie Acrobat, wyszukuj drugi wiersz w ten sposób:

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

DRUGA EDYCJA: Znajdowanie domyślnej aplikacji dla rozszerzenia pdf

Możesz wysłać zapytanie do rejestru, aby zidentyfikować domyślną aplikację do otwierania plików pdf, a następnie odpowiednio zdefiniować Nazwa pliku w StartInfo twojego procesu.Again, thanks surfbutler for your comment :)

Śledź to pytanie szczegółowe informacje na robienie że: Finding the default application for opening a particular file type on Windows

+2

+1 Myślę też, że można wyszukać aplikację powiązaną z dowolnym typem pliku, np. ".pdf" w rejestrze, a następnie umieść tę nazwę w parametrze pliku. Zobacz http://stackoverflow.com/questions/162331/finding-the-default-application-for-opening--particular-file-type-on-windows?rq=1 – Surfbutler

+0

Czy jest jakiś otwarty parametr, aby uzyskać czytnik Adobe otworzyć w widoku 2-stronnym? Ciekawe, jeśli ktoś wie, byłoby to naprawdę użyteczne. Rozglądam się, ale nie mogę nic znaleźć. –

3

można spróbować z

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

proszę dodać Ustawienia w obszarze właściwości tego projektu i korzystać z nich w ten sposób masz czyste i łatwo konfigurowalne ustawienia, które mogą być skonfigurowane jako domyślne

How To: Create a New Setting at Design Time

Aktualizacja: po komentarzach poniżej:

  1. Right + Kliknij na projekt
  2. Add New Item
  3. Pod Visual C# jest pusty -> Ogólne
  4. Wybierz Settings File
+9

Niewłaściwa karta może? ;) – ken2k

7

konwertowane kodu VB w blogu połączonych xsl do C# i modyfikowane to kawałek:

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 - to jest niewiarygodny. Zobacz Finding the default application for opening a particular file type on Windows.

Powiązane problemy