Est-il la peine de lookup l'application par défaut dans le registre lors de l'ouverture d'un fichier à partir d'une application C #?

StackOverflow https://stackoverflow.com/questions/886411

  •  23-08-2019
  •  | 
  •  

Question

Je construis une application (un projet parallèle qui est susceptible de solliciter l'aide de la communauté stackoverflow sur plus d'une fois) qui devra ouvrir une variété de types de fichiers (ie documents Word ouverts dans Word, pas nativement dans ma demande).

Je joue avec un code pour la recherche l'application par défaut pour le type de fichier dans le registre et la passer à Process.Start (). Il semble y avoir deux problèmes avec cette approche:

1) Le nom de l'application est citée dans certains cas, et non dans d'autres.
2) Process.Start () exige que le chemin d'application et il est des arguments sont passés séparément (c.-à-Process.Start ( "notepad.exe", @ "C: \ myfile.txt"), plutôt que Process.Start (@ "Bloc-notes exe C:. \ myfile.txt ");)

Cela signifie que lorsque je récupère le chemin du registre, je dois diviser (après avoir déterminé si je dois diviser sur des citations ou des espaces) pour déterminer quelle partie est le chemin d'application et quelles parties sont des arguments, puis passer ceux séparément à Process.Start ().

L'alternative semble être de passer juste le nom de fichier, comme dans Process.Start (@ « C: \ myfile.txt »), mais je pense que cela ne fonctionne que si l'application est dans la variable d'environnement Path

Par quel chemin est le meilleur? Dans le cas du registre, est-il une solution commune pour savoir comment faire l'analyse syntaxique des arguments?

Merci pour toute aide!

Mise à jour: Je suppose que le court est « Non » réponse
Il semble que j'allais vraiment la route surpuissant, et passant juste le nom de fichier fonctionnera chaque fois qu'il ya une valeur associée dans le Registre. C'est à dire. tout ce que je trouve dans le registre moi-même, Process.Start () sait déjà comment faire.

Je ne découvre que quand j'essayer avec une « nouvelle » filetype, je reçois un Win32Exception indiquant « Aucune application est associée au fichier spécifié pour cette opération. » Fredrik Mörk mentionne dans un commentaire que cela ne se produit pas pour lui dans Vista. Quelle est la bonne façon de gérer cette situation?

Était-ce utile?

La solution

Si l'extension est inscrit à ouvrir avec une application, il n'a pas besoin d'être dans le PATH afin d'exécuter.

Autres conseils

L'application n'a pas besoin d'être dans le PATH si vous ne spécifiez le nom du fichier. Le code suivant a bien fonctionné pour moi:

            System.Diagnostics.Process.Start(@"C:\Users\Dan\Desktop\minors.pdf");

Vous n'avez pas besoin généralement de rechercher le programme pour les types enregistrés, et le programme n'a pas besoin d'être généralement dans la variable d'environnement PATH. En général, la commande dans le registre contient le chemin complet. Voici comment la commande pour les fichiers .kml (Google Earth) semble (dans mon ordinateur):

C:\Program Files\Google\Google Earth\googleearth.exe "%1"

Étant donné que, vous pouvez en toute sécurité il suffit d'utiliser Process.Start ainsi que les noms de fichier de document. Faut-il que le type de fichier n'est pas enregistré, vous appellerez le comportement par défaut de Windows pour cela (vous demandant quel programme utiliser, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top