c # apre il file con l'applicazione e i parametri predefiniti


103

Il modo più semplice per aprire un file con l'applicazione predefinita è:

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

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

So come farlo creando un nuovo processo e impostando i parametri, ma in questo modo devo indicare il percorso dell'applicazione, e vorrei avere un'applicazione portatile e non dover impostare ogni volta il percorso dell'applicazione Uso l'applicazione su un altro computer. La mia idea è che mi aspetto che il computer abbia installato il lettore pdf e dica solo cosa aprire la pagina.

Grazie.


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

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

2
Non basta dire myProcess.StartInfo.FileName = "Acrobat.exe";senza dare il percorso completo all'applicazione?
daniloquio

1
Dai un'occhiata a questa domanda SO per vedere che aiuta
Mark Hall

2
@daniloquio: Penso che il punto sia che l'OP non sa con cosa l'utente finale ha installato sulla sua macchina per leggere i file Adobe, potrebbe essere Acrobat, Acrobat Reader o qualcos'altro.
Surfbutler

Risposte:


43

Se vuoi che il file venga aperto con l'applicazione predefinita, voglio dire senza specificare Acrobat o Reader, non puoi aprire il file nella pagina specificata.

D'altra parte, se sei d'accordo con la specifica di Acrobat o Reader, continua a leggere:


Puoi farlo senza indicare 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 vuoi che il pdf si apra con Reader ma con Acrobat, cambia la seconda riga in questo modo:

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

È possibile interrogare il registro per identificare l'applicazione predefinita per aprire i file pdf e quindi definire FileName sullo StartInfo del processo di conseguenza.

Segui questa domanda per i dettagli su come farlo: Trovare l'applicazione predefinita per l'apertura di un particolare tipo di file su Windows


2
+1 Inoltre penso che sia possibile cercare l'applicazione associata a qualsiasi tipo di file, ad esempio ".pdf", nel registro, quindi inserire quel nome nel parametro filename. Vedere stackoverflow.com/questions/162331/...
Surfbutler

C'è qualche parametro aperto per far sì che Adobe Reader si apra nella visualizzazione di 2 pagine? Solo curioso, se qualcuno lo sapesse, sarebbe davvero utile. Mi sono guardato intorno, ma non riesco a trovare niente.
taki Martillo

18

questo dovrebbe essere vicino!

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

1
È perfetto !
Francois Girard

1
Questo ha funzionato per me per l'apertura di PDF con il programma predefinito. Grazie!
Smitty-Werben-Jager-Manjenson

1
@imgen la domanda riguarda il fornire il numero di pagina come parametro. Questa risposta copre questo?
daniloquio

1
@daniloquio scusa, non ho letto abbastanza a fondo la domanda.
imgen

2
Non dimenticare di avvolgerlo in un blocco using, Process è IDisposable.
René Carannante

7

Ho convertito il codice VB nel post del blog collegato da xsl a C # e l'ho 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();
    }
}

MODIFICA: questo è inaffidabile. Consulta Trovare l'applicazione predefinita per l'apertura di un particolare tipo di file su Windows .


3

puoi provare con

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

-5

Aggiungi le impostazioni in Proprietà per il progetto e utilizzale in questo modo hai impostazioni configurabili semplici e pulite che possono essere configurate come predefinite

Procedura: creare una nuova impostazione in fase di progettazione

Aggiornamento: dopo i commenti di seguito

  1. Fare clic con il pulsante destro del mouse sul progetto
  2. Aggiungi un nuovo elemento
  3. In Elementi di Visual C # -> Generale
  4. Seleziona File di impostazioni

14
Scheda sbagliata forse? ;)
ken2k
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.