web-dev-qa-db-fra.com

fichier ouvert c # avec application et paramètres par défaut

Le moyen le plus simple d'ouvrir un fichier avec l'application par défaut est:

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

Toutefois, je voudrais savoir s’il existe un moyen de définir les paramètres de l’application par défaut, car j’aimerais ouvrir un fichier PDF dans un numéro de page déterminé.

Je sais comment puis-je créer un nouveau processus et définir les paramètres, mais de cette manière, je dois indiquer le chemin de l'application, et j'aimerais disposer d'une application portable et ne pas avoir à définir le chemin des applications chaque fois que j'utilise l'application sur un autre ordinateur. Mon idée est que je suppose que l'ordinateur a installé le lecteur PDF et ne dit que la page ouverte.

Merci.

79
Álvaro García

EDIT (grâce aux commentaires de surfbutler dans les commentaires de la question) Si vous voulez que le fichier soit ouvert avec l'application par défaut, je veux dire sans spécifier Acrobat ou Reader, vous ne pouvez pas l'ouvrir dans la page spécifiée .

Par contre, si vous êtes Ok avec spécifier Acrobat ou Reader, continuez à lire:


Vous pouvez le faire sans dire le chemin complet Acrobat, comme ceci:

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

Si vous ne souhaitez pas que le fichier PDF s'ouvre avec Reader mais avec Acrobat, modifiez la deuxième ligne de la manière suivante:

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

SECOND EDIT: Recherche de l'application par défaut pour l'extension pdf

Vous pouvez interroger le registre pour identifier l'application par défaut permettant d'ouvrir les fichiers pdf, puis définir FileName sur le fichier StartInfo de votre processus en conséquence. Again, thanks surfbutler for your comment :)

Suivez cette question pour plus de détails: Recherche de l'application par défaut permettant d'ouvrir un type de fichier particulier sous Windows

36
daniloquio

J'ai converti le code VB dans l'article de blog lié par xsl en C # et l'ai légèrement modifié:

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 - ce n'est pas fiable. Voir Recherche de l'application par défaut permettant d'ouvrir un type de fichier particulier sous Windows .

7
Ohad Schneider

vous pouvez essayer avec 

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

cela devrait être proche!

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