c # ouvrir le fichier avec l'application et les paramètres par défaut


105

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

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

Cependant, je voudrais savoir s'il existe un moyen de définir les paramètres de l'application par défaut, car je voudrais ouvrir un pdf dans un numéro de page déterminé.

Je sais comment le faire en créant un nouveau processus et en définissant les paramètres, mais de cette façon, je dois indiquer le chemin de l'application, et je voudrais avoir une application portable et ne pas avoir à définir le chemin de l'application à chaque fois J'utilise l'application sur un autre ordinateur. Mon idée est que je m'attends à ce que l'ordinateur ait installé le lecteur pdf et ne dise que ce qu'il faut ouvrir.

Merci.


Voulez-vous dire envoyer les paramètres à l'exécutable Adobe plutôt qu'au fichier pdf, mais sans utiliser le chemin complet?
Bali C

2
Comment pensez-vous que cela fonctionne? Si vous ne connaissez pas le chemin de l'application, vous ne savez pas quel est le visualiseur PDF par défaut et vous ne savez pas quel format de paramètre utiliser.
ken2k

2
Ne suffit-il pas de dire myProcess.StartInfo.FileName = "Acrobat.exe";sans donner le chemin complet de l'application?
daniloquio

1
Jetez un oeil à cette question SO pour voir qu'elle aide
Mark Hall

2
@daniloquio: Je pense que le fait est que l'OP ne sait pas ce que l'utilisateur final a installé sur sa machine pour lire les fichiers Adobe, cela pourrait être Acrobat, Acrobat Reader ou autre chose.
Surfbutler

Réponses:


45

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 ouvrir le fichier dans la page spécifiée.

D'autre part, si vous êtes d'accord pour spécifier Acrobat ou Reader, continuez à lire:


Vous pouvez le faire sans indiquer le chemin d'accès complet d'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 voulez pas que le pdf s'ouvre avec Reader mais avec Acrobat, modifiez la deuxième ligne comme ceci:

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

Vous pouvez interroger le registre pour identifier l'application par défaut pour ouvrir les fichiers pdf, puis définir FileName sur StartInfo de votre processus en conséquence.

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


2
+1 Je pense également qu'il est possible de rechercher l'application associée à n'importe quel type de fichier, par exemple «.pdf» dans le registre, puis de mettre ce nom dans le paramètre de nom de fichier. Voir stackoverflow.com/questions/162331/…
Surfbutler

Existe-t-il un paramètre ouvert pour qu'Adobe Reader s'ouvre en mode 2 pages? Juste curieux, si quelqu'un sait, ce serait vraiment utile. J'ai regardé autour de moi, mais je ne trouve rien.
taki Martillo

20

cela devrait être proche!

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

1
C'est parfait !
Francois Girard

1
Cela a fonctionné pour moi pour ouvrir les PDF avec le programme par défaut. Je vous remercie!
Smitty-Werben-Jager-Manjenson

1
@imgen la question est de fournir le numéro de page comme paramètre. Cette réponse couvre-t-elle cela?
daniloquio le

1
@daniloquio désolé, je n'ai pas suffisamment lu la question.
imgen

3
N'oubliez pas de l'envelopper dans un bloc using, Process is IDisposable.
René Carannante

7

J'ai converti le code VB dans le billet de blog lié par xsl en C # et l' ai modifié un peu:

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 pour ouvrir un type de fichier particulier sous Windows .


3

tu peux essayer avec

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

-5

Veuillez ajouter des paramètres sous Propriétés pour le projet et utilisez-les de cette façon, vous avez des paramètres configurables propres et faciles qui peuvent être configurés par défaut

Comment: créer un nouveau paramètre au moment du design

Mise à jour: après les commentaires ci-dessous

  1. Clic droit + clic sur le projet
  2. Ajoute un nouvel objet
  3. Sous Éléments Visual C # -> Général
  4. Sélectionnez le fichier de paramètres

14
Mauvais onglet peut-être? ;)
ken2k
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.