2016-08-10 3 views
0

Als ein lustiges Projekt versuche ich mehrere Befehle über einen git-cmd.exe-Prozess über C# auszuführen.Open git bash Prozess ohne Fenster

Ich habe diesen Code mehrere Befehle auszuführen:

var info = new ProcessStartInfo(@"C:\Program Files\Git\git-cmd.exe"); 
info.RedirectStandardInput = true; 
info.UseShellExecute = false; 
var gitProcess = new Process { StartInfo = info }; 
gitProcess.Start(); 

using (StreamWriter sw = gitProcess.StandardInput) 
{ 
    // commands here 
} 

gitProcess.WaitForExit(); 

Dies läuft gut, aber wenn ich versuche, den folgenden Befehl ausführen, erhalte ich mehrere Nachrichten.

Befehl (https://stackoverflow.com/a/33656490/1671161):

curl -X POST -v -u username:password https://api.bitbucket.org/2.0/repositories/TeamName/reponame -H "Content-Type: application/json" -d '{"scm": "git", "is_private": true, "fork-policy": "no_public_forks", "has_issues": true}' 

Nachrichten:

Note: Unnecessary use of -X or --request, POST is already inferred. 
* timeout on name lookup is not supported 
* Trying 2401:1d80:1010::153... 
* Connected to api.bitbucket.org (2401:1d80:1010::153) port 443 (#0) 

#more messages, seems OK to me so far, but then this: 

Connection state changed (MAX_CONCURRENT_STREAMS updated)! 
* We are completely uploaded and fine 
* HTTP 1.0, assume close after body 
< HTTP/2 400 
< server: nginx/1.6.2 
< vary: Authorization, Cookie 
< content-type: text/plain 
< strict-transport-security: max-age=31536000 
< date: Wed, 10 Aug 2016 17:34:57 GMT 
< x-served-by: app-112 
< x-static-version: 89c5b48218a9 
< etag: "825644f747baab2c00e420dbbc39e4b3" 
< x-render-time: 0.0194010734558 
< x-accepted-oauth-scopes: repository:admin 
< x-version: 89c5b48218a9 
< x-request-count: 459 
< x-frame-options: SAMEORIGIN 
< content-length: 11 
< 
Bad Request* Closing connection 0 
* TLSv1.2 (OUT), TLS alert, Client hello (1): 
Note: Unnecessary use of -X or --request, POST is already inferred. 
* Rebuilt URL to: git,/ 
* timeout on name lookup is not supported 
* getaddrinfo(3) failed for git,:80 
* Couldn't resolve host 'git,' 
* Closing connection 1 

BitBuckets API-Dokumentation nachschlagen, die 400 Rückkehrzustand bedeutet „Wenn das Eingabedokument ungültig war, oder wenn der Anrufer das fehlt Berechtigung zum Erstellen von Repositories unter dem Zielkonto. " Leider konnte ich das richtige Format für den Befehl in git-cmd.exe nicht finden.

Der Befehl wird in Git Bash in Ordnung, so dass ich versuchte, einen Git Bash-Prozess auszuführen:

var gitbashinfo = new ProcessStartInfo(@"C:\Program Files\Git\git-bash.exe"); 
gitbashinfo.RedirectStandardInput = true; 
gitbashinfo.UseShellExecute = false; 


var gitbashProcess = new Process { StartInfo = gitbashinfo }; 
gitbashProcess.Start(); 

using (StreamWriter sw = gitbashProcess.StandardInput) 
{ 
    // The command 
} 

gitbashProcess.WaitForExit(); 

Aber dies ein Git Bash-Fenster öffnet, und nicht meinen Befehl ausführen. Ich habe ehrlich erwartet, dass das Programm genau dasselbe macht wie ich mit dem git-cmd.exe-Prozess. Öffnen Sie also kein neues Fenster, sondern führen Sie alle Befehle im bereits geöffneten Fenster aus und zeigen Sie auch die Ausgabe an.

Meine Frage ist also: Wie kann ich den CURL-Befehl ausführen, um in meinem git-cmd.exe-Prozess erfolgreich ausgeführt werden? ODER, wie sollte ich den git-bash.exe-Prozess in meinem Programmfenster ausführen?

Antwort

0

Setzen Sie die Eigenschaft CreateNoWindow in der ProcessStartInfo auf true und es wird angezeigt, wenn git in Ihrer eigenen Anwendung ausgeführt wird. Beide Möglichkeiten starten einen untergeordneten Prozess, aber mit CreateNoWindow auf true wird verhindert, dass das Konsolenfenster angezeigt wird.

+0

Bereits versucht, dass vorher, aber es immer noch ein neues Fenster erstellen .. – FJPoort