Existe-t-il un moyen d'exécuter des commandes d'invite de commandes à partir d'une application C #? Si oui, comment pourrais-je procéder comme suit:
copy /b Image1.jpg + Archive.rar Image2.jpg
Cela incorpore essentiellement un fichier RAR dans l'image JPG. Je me demandais simplement s'il y avait un moyen de le faire automatiquement en C #.
Réponses:
c'est tout ce que vous avez à faire exécuter des commandes shell à partir de C #
ÉDITER:
C'est pour cacher la fenêtre cmd.
EDIT: 2
Il est important que l'argument commence par
/C
sinon il ne fonctionnera pas. Comment Scott Ferguson a dit: il "Exécute la commande spécifiée par la chaîne puis se termine."la source
J'ai essayé la solution @RameshVel mais je n'ai pas pu passer d'arguments dans mon application console. Si quelqu'un rencontre le même problème, voici une solution:
la source
cmd.StandardInput.WriteLine(@"cd C:\Test; pwd")
la source
@
signe en C #?proc1.FileName = "C:\\Windows\\System32\\cmd.exe";
proc1.Verb = "runas";
ce processus s'exécute avec des privilèges élevés ... Ce n'est pas toujours prévu.Aucune des réponses ci-dessus n'a aidé pour une raison quelconque, il semble qu'elles balaient les erreurs sous le tapis et rendent le dépannage de sa commande difficile. J'ai donc fini par faire quelque chose comme ça, peut-être que cela aidera quelqu'un d'autre:
la source
cmd.exe
application, vous pouvez passer des commandes comme arguments.echo Hello World!
et affiche la sortie de la commande dans la fenêtre cmd qui apparaît. J'ai donc essayé:Filename = @"echo"
,Arguments = "Hello World!"
,UseShellExecute = false
,RedirectStandardOuput = false
,CreateNoWindow = false
. Cela a permis à la fenêtre cmd de l'application parente d'afficher "Hello World!" (ce qui est logique car stdout n'a pas été redirigé vers le processus enfant).Bien que techniquement cela ne réponde pas directement à la question posée, cela répond à la question de savoir comment faire ce que l'affiche originale voulait faire: combiner des fichiers. Si quoi que ce soit, c'est un article pour aider les débutants à comprendre de quoi parlent Instance Hunter et Konstantin.
C'est la méthode que j'utilise pour combiner des fichiers (dans ce cas un jpg et un zip). Notez que je crée un tampon qui est rempli avec le contenu du fichier zip (en petits morceaux plutôt qu'en une grande opération de lecture), puis le tampon est écrit à l'arrière du fichier jpg jusqu'à la fin du fichier zip. atteint:
la source
si vous voulez garder la fenêtre cmd ouverte ou si vous voulez l'utiliser dans winform / wpf alors utilisez-la comme ceci
Gardera la fenêtre cmd ouverte
la source
cmd
commande et ses paramètres.Oui, il y en a (voir le lien dans le commentaire de Matt Hamilton), mais il serait plus facile et mieux d'utiliser les classes IO de .NET. Vous pouvez utiliser File.ReadAllBytes pour lire les fichiers, puis File.WriteAllBytes pour écrire la version "intégrée".
la source
Vous pouvez le faire en utilisant CliWrap sur une seule ligne:
la source
Unable to find package 'CliWrap' at source
en référence à
Microsoft.VisualBasic
la source
Voici une petite version de code simple et moins. Cela masquera également la fenêtre de la console.
la source
si vous souhaitez exécuter la commande en mode asynchrone - et imprimer les résultats. vous pouvez vous cette classe:
la source
Vous pouvez y parvenir en utilisant la méthode suivante (comme mentionné dans d'autres réponses):
Lorsque j'ai essayé les méthodes répertoriées ci-dessus, j'ai constaté que ma commande personnalisée ne fonctionnait pas en utilisant la syntaxe de certaines des réponses ci-dessus.
J'ai découvert que des commandes plus complexes doivent être encapsulées entre guillemets pour fonctionner:
la source
vous pouvez utiliser simplement écrire le code dans une
.bat
extension de format, le code du fichier batch:c:/ copy /b Image1.jpg + Archive.rar Image2.jpg
utilisez ce code c #:
Process.Start("file_name.bat")
la source
.vbs
extension de format, le code:CreateObject("Wscript.Shell").Run "filename.bat",0,True