je veux demander de l'aide pour ouvrir un fichier à partir de l'application C # avec l'application associée. J'ai essayé ceci:
ProcessStartInfo pi = new ProcessStartInfo(file);
pi.Arguments = Path.GetFileName(file);
pi.UseShellExecute = true;
pi.WorkingDirectory = Path.GetDirectoryName(file);
pi.FileName = file;
pi.Verb = "OPEN";
Process.Start(pi);
ou ca:
Process.Start(file);
où string file
dans les deux exemples représente le chemin complet du fichier à ouvrir. Maintenant, tout fonctionne bien, à l'exception des images (jpg) avec l'application ACDSee. Les associations Irfanview fonctionnent bien, les documents MS Office également. Après avoir tenté d'ouvrir l'image jpg associée à acdsee, il ne fait qu'exécuter l'acdsee dans la zone de notification et n'ouvre pas le fichier.
J'ai découvert que, dans le registre CLASSES_ROOT pour les images * .jpg, il existe une valeur ACDSee.JPG en tant qu'application associée et sous cette clé, il y a dans le Shell-> Ouvrir-> Commande un chemin:
"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde
et je pense que ce bizarre /dde
est la raison pour laquelle je ne peux pas ouvrir le fichier. Je me suis rendu compte que dans la même clé reg Shell-> Open il y a quelques DDEExec
entrées de clé avec la valeur [open("%1")]
Pour Irfan view ou une autre application cochée, il n’existe pas ddeexec, mais seulement la commande normale telle que
"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1"
peut être exécuté à partir de la ligne de commande après avoir échangé le% 1 par nom de fichier, mais je ne pouvais pas exécuter la commande de acdsee entry dans la ligne de commande :(
Ma question est donc la suivante: comment puis-je configurer l'objet ProcessStartInfo
en assurez-vous que tous les fichiers seront exécutés comme ce serait le cas dans l'explorateur avec un double-clic, les normes et ce DDEExec
ceux? Y a-t-il autre chose comme DDEExec
dont je devrais être au courant? merci et désolé pour mon EN
Ecrivez
System.Diagnostics.Process.Start(@"file path");
exemple
System.Diagnostics.Process.Start(@"C:\foo.jpg");
System.Diagnostics.Process.Start(@"C:\foo.doc");
System.Diagnostics.Process.Start(@"C:\foo.dxf");
...
Et Shell exécutera le programme associé en le lisant dans le registre, comme le fait habituellement le double-clic.
C'est un vieux fil, mais juste au cas où quelqu'un le verrait comme moi. pi.FileName doit être défini sur le nom du fichier (et éventuellement le chemin complet du fichier) de l'exécutable que vous souhaitez utiliser pour ouvrir votre fichier. Le code ci-dessous me permet d’ouvrir un fichier vidéo avec VLC.
var path = files[currentIndex].fileName;
var pi = new ProcessStartInfo(path)
{
Arguments = Path.GetFileName(path),
UseShellExecute = true,
WorkingDirectory = Path.GetDirectoryName(path),
FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe",
Verb = "OPEN"
};
Process.Start(pi)
La réponse de Tigrane fonctionne, mais utilisera l'application par défaut de Windows pour ouvrir votre fichier. Il peut donc être utile d'utiliser ProcessStartInfo si vous souhaitez ouvrir le fichier avec une application autre que celle par défaut.
Dans . Net Core (à partir de la version 2.2), il devrait être:
new Process
{
StartInfo = new ProcessStartInfo(@"file path")
{
UseShellExecute = true
}
}.Start();
Un problème lié à github peut être trouvé ici