Il est censé être facile, mais je ne peux pas le faire fonctionner.
Quand j'exécute la commande suivante à l'intérieur de la cmd, cela fonctionne parfaitement bien. Lorsque j'exécute la commande à l'intérieur du code Voici la commande que j'utilise (qui fonctionne parfaitement bien lorsque vous utilisez directement sur voici ce que j'essaie de faire dans suis-ce que je manque quelque chose? J'ai trouvé beaucoup de postes concernant être conscient, la question processus.start () arguments n'est pas la même - Dans mon cas, je neeset de définir la variable système c # code>, il ne fera rien (aucune exception n'a été lancée non plus). P>
cmd.exe code>): p>
c # code > (ne fonctionne pas): p>
C # code> à partir d'un processus, mais rien n'a résolu mon problème. J'ai également essayé de démarrer le processus avec
startinfo code> et ajouté les propriétés telles que
arguments code>,
nom de fichier code>, etc., mais cela n'a pas fonctionné non plus. < / p>
(définir pgpassword) code>, car
pg_restore code> n'a pas d'argument de mot de passe. P> P>
3 Réponses :
Essayez ceci:
var command = "SET PGPASSWORD=mypassword && pg_restore.exe"; var param = "-U username -d dbname C:\file\to\dump\my.dump"; var process = new Process(); var processInfo = new ProcessStartInfo(command, param) { WorkingDirectory = @"%ProgramFiles%\PostgreSQL\12\bin" }; process.StartInfo = processInfo; process.WaitForExit();
Veuillez développer votre réponse par exemple sur votre réponse, où ils ont mal tourné et pourquoi. Il ne doit pas nécessairement être une solution complète et romantique qui détaille chaque étape, suffisamment suffisante pour donner à la vue un besoin afin de réaliser votre solution.
Cela ne fonctionne pas, je reçois l'exception "Aucun processus n'est associé à cet objet." "
Vous devez préfixer votre chaîne d'arguments avec / c code> de sorte que cmd sait que vous le disez quoi faire:
var arg = @"/c cd %ProgramFiles%\PostgreSQL\12\bin && SET PGPASSWORD=mypassword&& pg_restore.exe -U username -d dbname C:\file\to\dump\my.dump";
Process.Start("cmd.exe", arg);
L'utilisateur a-t-il même besoin du / c code>? Pourquoi ne pas simplement l'appeler directement?
Tu as fait ma journée! Merci @Albie - Qu'est-ce qui est / c debout? Son travail, merci!
@gala_m Il n'y a aucune raison d'ouvrir une console pour exécuter un autre processus, pas même pour passer des variables d'environnement
L'application que vous souhaitez exécuter est cmd code> est juste la console, il n'est pas nécessaire de démarrer un autre processus.
pg_restore.exe code> dans le fichier
% \ postgreSQL \ 12 \ bin code> dossier. Vous pouvez transmettre des variables d'environnement via Processstartinfo.Environmentvariables Dictionnaire. Je ne sais pas si le constructeur Processstartinfo élargit les variables d'environnement. Vous pouvez utiliser Environnement.expandenvironmentvariables A> Pour que le chemin soit correct: p>
Cela ne fonctionne pas pour moi. J'ai copié votre code et j'ai changé les chemins - cela n'a rien fait, je viens de courir mais n'a pas eu d'effet.
@gala_m uniquement si pg_restore.exe code> a besoin d'accéder à d'autres fichiers dans le dossier
bac code>. Le chemin complet de l'exécutable est déjà fourni dans la variable code> FullPath code>. J'ai changé le code pour utiliser le dossier bin en tant que répertoire de travail.
Dupliqué possible de processus.start () arguments , vous devrez peut-être définir le
workingdirectory code>?
Vous n'avez pas besoin
cmd code> pour commencer. L'application que vous souhaitez exécuter est
pg_restore code>, pas
cmd code>.
@ Çöđěxěŕ j'ai essayé avec le répertoire de travail, il n'a pas fonctionné
@Panagiikanavos - Non, quand je démarre pg_restore, je ne peux pas définir l'argument de mot de passe, c'est pourquoi j'ai besoin de définir l'attribut de cmd
@gala_m vous ne doit pas i> besoin de le faire, Processstartinfo vous permet de définir des variables d'environnement.
cmd code> n'est rien de plus que la console