2009-07-23 19 views
1

Ich spiele etwa mit einem Add-In zu Visual Studio 2005, das einen externen Prozess aufruft.process.start() hängt beim Aufruf von VS Addin

Wenn ich den Code außerhalb des Addins ausführen - also in einem eigenständigen Projekt, funktioniert es gut. Wenn ich es jedoch als Teil eines AddIns anrufe, wird der Process.Start() -Aufruf gemacht, aber dann passiert nichts, die nachfolgenden Codezeilen werden niemals erreicht.

Ich habe versucht, VS mit Standard und erhöhten Privilegien zu laufen, aber den gleichen Effekt zu bekommen.

Der Code ist unten - es wird aufgerufen, wenn auf einem benutzerdefinierten Menüpunkt klicken:

 string documentPath = @"C:\TestCode\TestApp\Testform.cs"; 
     string folder = Path.GetDirectoryName(@"C:\TestCode\TestApp\"); 

     System.Diagnostics.Process p = new System.Diagnostics.Process(); 
     p.StartInfo.FileName = "notepad.exe"; 
     p.StartInfo.Arguments = documentPath; 
     p.StartInfo.UseShellExecute = true; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.Start(); 

     string output = p.StandardOutput.ReadToEnd(); 

ich verschiedene ausführbare Dateien ausprobiert habe, aber dies keinen Unterschied macht. Gehe ich in VS in die falsche Richtung? Jede Hilfe wird geschätzt.

+0

Warum haben Sie "Ordner", wenn Sie es nicht einmal verwenden? hast du versucht, es zu debuggen? –

+0

Ich habe es versehentlich vergessen, nachdem ich meinen "echten" Code für die Veröffentlichung hier bereinigt hatte –

+0

FYI beim Debuggen hinein, es ging zum process.start und dann tat nichts, es hing nur ... –

Antwort

1

Haben Sie versucht versuchen/fangen? Insbesondere gibt es eine Reihe von Problemen, die sich auf das Working Path/Current-Verzeichnis mit VS-Erweiterungen beziehen (aber ich würde zumindest erwarten, dass Notepad funktioniert).

Ich bin auch nicht sicher, was Sie erwarten, dass Code zu tun (in Bezug auf die Umleitung von stdout von notepad.exe); könntest Du das erläutern?

Kein Problem im Moment, aber beachten Sie, dass, wenn sie mit Pfaden als Argumente arbeiten, werden Sie Zitate von Anfang an hinzufügen möchten - dh

p.StartInfo.Arguments = "\"" + documentPath + "\""; 

(falls der Pfad Leerzeichen drin)

+0

Doh! Ich denke, dass ich zwischen all den verschiedenen Problemen, die ich hatte, gemischt war und UseShellExecute nicht auf false gesetzt hatte, was zum Umleiten der Ausgabe erforderlich ist. Setzen Sie dies auf "false" und es wurde der Prozess gestartet. Ich akzeptiere diese Antwort, weil es mir geholfen hat, den Fehler zu entdecken. Ich dachte fälschlicherweise, dass wenn eine Ausnahme ausgelöst wurde, würde es in der IDE angezeigt werden, aber es scheint nicht, wenn ein Add-in Debuggen .... –

+0

Wenn alles andere fehlschlägt ... Ausnahmebehandlung; -p –

Verwandte Themen