2012-07-06 6 views
65

Il modo più semplice per aprire un file con l'applicazione predefinita è:C# file aperti con l'applicazione predefinita e parametri

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

Tuttavia, vorrei sapere se esiste un modo per impostare i parametri per l'applicazione predefinita , perché mi piacerebbe aprire un pdf in un determinato numero di pagina.

So come posso farlo creando un nuovo processo e impostare i parametri, ma in questo modo ho bisogno di indicare il percorso dell'applicazione, e mi piacerebbe avere un'applicazione portatile e non dover impostare il percorso delle applicazioni ogni volta che utilizzo l'applicazione su un altro computer. La mia idea è che mi aspetto che il computer abbia installato il lettore pdf e dica solo quale pagina è aperta.

Grazie.

+0

Intendi inviare parametri all'eseguibile Adobe anziché al file pdf, ma senza utilizzare il percorso completo? –

+2

Come ti aspetti che funzioni? Se non conosci il percorso dell'applicazione, non sai quale è il visualizzatore PDF predefinito e non sai quale formato di parametro utilizzare. – ken2k

+1

Non è sufficiente dire 'myProcess.StartInfo.FileName =" Acrobat.exe ";' senza fornire il percorso completo dell'applicazione? – daniloquio

risposta

34

EDIT (grazie alla surfbutler commento in questione commenti) Se si desidera che il file venga aperto con l'applicazione predefinita, voglio dire senza specificare Acrobat o Reader, non è possibile aprire il file nelle specifiche pagina ified.

D'altra parte, se siete ok con specificando Acrobat o Reader, continuate a leggere:


si può fare senza dire il percorso completo di Acrobat, in questo modo:

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

Se non si desidera che il pdf per aprire con il lettore, ma con Acrobat, chage la seconda linea come questa:

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

SECONDO EDIT: Trovare l'applicazione predefinita per il pdf estensione

È possibile interrogare il registro per identificare l'applicazione predefinita per aprire i file PDF e quindi definire FileName sul StartInfo del vostro processo di conseguenza.Again, thanks surfbutler for your comment :)

Seguire questa domanda per i dettagli a fare che: Finding the default application for opening a particular file type on Windows

+2

+1 Inoltre, penso che sia possibile cercare l'applicazione associata a qualsiasi tipo di file, ad es. '.pdf' nel registro, quindi inserire quel nome nel parametro filename. Vedi http://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-file-type-on-windows?rq=1 – Surfbutler

+0

C'è qualche parametro aperto per ottenere Adobe Reader aprire nella vista di 2 pagine? Solo curioso, se qualcuno lo sa, sarebbe davvero utile. Mi sono guardato intorno, ma non riesco a trovare nulla. –

3

si può provare con

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

Si prega di aggiungere impostazioni in Proprietà per il Progetto e fare uso di loro in questo modo si dispone di impostazioni pulite e facile configurabili che possono essere configurato come predefinito

How To: Create a New Setting at Design Time

Aggiornamento: dopo i commenti sotto

  1. destra + Clicca su progetto
  2. Add New Item
  3. in Visual C# Oggetti -> Generale
  4. Selezionare Impostazioni file
+9

Scheda errata forse? ;) – ken2k

7

ho convertito il codice VB nel post del blog collegati da xsl per C# e modificato un po ':

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 - questo è inaffidabile. Vedere Finding the default application for opening a particular file type on Windows.