C # Open Fichier avec des arguments de passage d'application associés
-
14-11-2019 - |
Question
J'essaie de lancer l'application par défaut enregistrée pour une extension spécifiant un argument supplémentaire:
ProcessStartInfo p = new ProcessStartInfo();
p.Arguments = "myargument";
p.FileName = "file.ext";
Process.Start(p);
L'application commence à ouvrir correctement le fichier spécifié. Le problème est qu'il ne reçoit qu'un seul paramètre (le nom du fichier), ignorant totalement les "arguments" supplémentaires.
Est-il possible de faire ce que je veux? Est-ce que je fais quelque chose de mal?
Merci d'avance pour votre aide,
Paolo
La solution
Je crois que cela est prévu. Dans les coulisses, Windows trouve l'application par défaut dans le registre et la création d'un nouveau processus et y transmet votre nom de fichier. J'obtiens le même comportement si je vais à une invite de commande et tape "argument filename.ext", que mes arguments ne sont pas transmis à la demande.
Ce que vous devez probablement faire, c'est trouver vous-même l'application par défaut en recherchant dans le registre. Ensuite, vous pouvez démarrer ce processus avec des arguments, au lieu d'essayer de commencer par FileType Association. Il y a une réponse ici sur la façon de trouver l'application par défaut dans le registre:
Rechercher l'application par défaut pour ouvrir un type de fichier particulier sur Windows
Autres conseils
Quel est exactement votre "argument", a-t-il des espaces, des barres oblique inverse, etc.?
Process process = new Process();
process.StartInfo.FileName = @"C:\process.exe";
process.StartInfo.Arguments = @"-r -d something else";
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
process.Start();
Y a-t-il une raison pour laquelle vous ne pouvez pas démarrer l'application, puis utiliser l'extension et les arguments dans vos arguments?
Je pense qu'une méthode plus facile consiste à utiliser la commande cmd
void LaunchAssociatedProgram(string filename) {
Process.Start( @"cmd.exe", "/C start "+ filename );
}
ÉDITER:
Je ne sais pas si cela fonctionne avec les arguments, mais c'est ce que je cherchais pour lancer un programme associé ...