Ich habe das andere Thema gesehen und habe ein anderes Problem. Der Prozess startet (siehe Task-Manager), aber der Ordner wird auf meinem Bildschirm nicht geöffnet. Was ist los mit dir?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Ich habe das andere Thema gesehen und habe ein anderes Problem. Der Prozess startet (siehe Task-Manager), aber der Ordner wird auf meinem Bildschirm nicht geöffnet. Was ist los mit dir?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Antworten:
Haben Sie sichergestellt, dass der Ordner " c:\teste
" vorhanden ist? Wenn dies nicht der Fall ist, wird der Explorer geöffnet und zeigt einen Standardordner an (in meinem Fall " C:\Users\[user name]\Documents
").
Aktualisieren
Ich habe folgende Variationen ausprobiert:
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
Wenn keines davon (außer dem, das eine Ausnahme auslöst) auf Ihrem Computer funktioniert, liegt das Problem meines Erachtens nicht im Code, sondern in der Umgebung. In diesem Fall würde ich eine (oder beide) der folgenden Möglichkeiten ausprobieren:
Process.Start(path)
Aktiviert das Fenster (darf nur in der Taskleiste blinken, nicht nach vorne gebracht); explorer.exe
Der Parameter + öffnet ein neues Fenster immer vorne (aber mehrmals dasselbe Fenster). Also haben beide Vorbehalte.
Process.Start(@"c:\temp")
muss mit Vorsicht verwendet werden. Wenn c:\temp.com
vorhanden, wird der Funktionsaufruf geöffnetc:\temp.com
stattdessen . Weitere Informationen finden Sie unter forums.iis.net/p/1239773/2144186.aspx .
Process.Start(@"c:\temp")
ein anderer Ordner wie C:\temp.exe
oder geöffnet werden kann C:\temp.cmd
. In diesem Problem zeigt VS selbst ein fehlerhaftes Verhalten . Sie können dies vermeiden, indem Sie entweder die explorer.exe
Variante verwenden oder (besser IMO) immer a anhängen Path.DirectorySeparatorChar
. Zum Beispiel Process.Start(@"C:\temp\")
.
Wenn Sie der Vollständigkeit halber nur einen Ordner öffnen möchten, verwenden Sie Folgendes:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Stellen Sie sicher, dass FileName mit endet Path.DirectorySeparatorChar
, damit es eindeutig auf einen Ordner verweist . (Danke an @binki.)
Diese Lösung funktioniert nicht zum Öffnen eines Ordners und Auswählen eines Elements, da es dafür kein Verb zu geben scheint.
C:\teste.exe
oder C:\teste.cmd
vorhanden ist, wird der Explorer für diesen anderen Ordner anstelle des von Ihnen beabsichtigten Ordners geöffnet. Um dies zu vermeiden, können Sie a Path.DirectorySeparatorChar
an den Pfad anhängen . Sehen Sie, wie VS selbst den gleichen Fehler macht .
Verb = "select"
, aber leider nicht. Egal, tolle Antwort!
Verb = "open"
war nicht notwendig. (In Windows getestet, können andere Betriebssysteme abweichen.)
.Verbs
Eigenschaft auf ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Sie verwenden das @ -Symbol, wodurch die Notwendigkeit entfällt, Ihren Backslashes zu entkommen.
Entfernen Sie das @ oder ersetzen Sie \\ durch \
Sie benötigen keinen doppelten Backslash, wenn Sie nicht entkappte Zeichenfolgen verwenden:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Sie sollten eine der verwenden System.Diagnostics.Process.Start()
Überladungen verwenden. Es ist ganz einfach!
Wenn Sie den Dateinamen des Prozesses, den Sie ausführen möchten, nicht platzieren ( explorer.exe
), erkennt das System ihn als gültigen Ordnerpfad und versucht, ihn an den bereits ausgeführten Explorer-Prozess anzuhängen. In diesem Fall unternimmt der Explorer nichts, wenn der Ordner bereits geöffnet ist.
Wenn Sie den Dateinamen des Prozesses eingeben (wie Sie es getan haben), versucht das System, eine neue Instanz des Prozesses auszuführen, wobei die zweite Zeichenfolge als Parameter übergeben wird. Wenn die Zeichenfolge ein gültiger Ordner ist, wird sie im neu erstellten Prozess geöffnet. Wenn nicht, führt der neue Prozess nichts aus.
Ich weiß auf keinen Fall, wie ungültige Ordnerpfade vom Prozess behandelt werden. Die Verwendung System.IO.Directory.Exists()
sollte ausreichen, um dies sicherzustellen.
Path.DirectorySeparatorChar
. Wenn andernfalls ein Ordner mit demselben Namen, aber .cmd
oder .exe
möglicherweise anderen Suffixen vorhanden ist, wird der Explorer für diesen anderen Ordner geöffnet. Wenn es sich tatsächlich um ausführbare Dateien oder Skripts handelt, werden diese ausgeführt, anstatt den Ordner wie beabsichtigt zu öffnen.
Verwenden Sie eine überladene Version der Methode, die eine ProcessStartInfo-Instanz verwendet, und setzen Sie die ProcessWindowStyle-Eigenschaft auf einen für Sie geeigneten Wert.
Sie entkommen dem Backslash, wenn das at-Zeichen dies für Sie erledigt.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Dieser Code funktioniert in der VS2010-Umgebung einwandfrei und öffnet den lokalen Ordner ordnungsgemäß. Wenn Sie jedoch dieselbe Anwendung in IIS hosten und versuchen, sie zu öffnen, schlägt dies mit Sicherheit fehl.
Ich hatte gerade dieses Problem und fand heraus, warum. Mein Grund ist hier nicht aufgeführt, so dass jeder andere, der dieses Problem bekommt und keiner von diesen es behebt.
Wenn Sie Visual Studio als einen anderen Benutzer ausführen und versuchen, Process.Start zu verwenden, wird es in diesem Benutzerkontext ausgeführt und auf Ihrem Bildschirm nicht angezeigt.
Seltsam.
Wenn explorer.exe nicht gefunden werden kann, sollten Sie eine Ausnahme erhalten. Wenn der Ordner nicht gefunden werden kann, sollte dennoch ein Ordner geöffnet werden (z. B. meine Dokumente).
Sie sagen, dass eine andere Kopie des Explorers im Taskmanager angezeigt wird, aber Sie können sie nicht sehen.
Ist es möglich, dass es sich außerhalb des Bildschirms öffnet (dh eines anderen Monitors)?
Oder tun Sie dies zufällig in einem nicht interaktiven Dienst?
Wird es korrekt geöffnet, wenn Sie "explorer.exe c: \ teste" in Ihrem Startmenü ausführen? Wie lange versuchst du das schon? Ich sehe ein ähnliches Verhalten, wenn mein Computer viele Prozesse hat und wenn ich einen neuen Prozess öffne (Sätze sagen IE). Er startet im Task-Manager, wird aber nicht im Front-End angezeigt. Haben Sie einen Neustart versucht?
Der folgende Code sollte eine neue Explorer-Instanz öffnen
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
Haben Sie viele Anwendungen ausgeführt, wenn Sie dies versuchen? Bei der Arbeit stoße ich manchmal auf seltsames Verhalten, weil meinem System die GDI-Handles ausgehen, da so viele Fenster geöffnet sind (unsere Apps verwenden viel).
In diesem Fall werden Fenster und Kontextmenüs erst angezeigt, wenn ich etwas schließe, um einige GDI-Handles freizugeben.
Das Standardlimit in XP und Vista ist 10000. Es ist nicht ungewöhnlich, dass mein DevStudio 1500 GDI-Handles hat. Wenn Sie also ein paar Kopien von Dev Studio geöffnet haben, kann es diese ziemlich schnell auffressen. Sie können im TaskManager eine Spalte hinzufügen, um zu sehen, wie viele Handles von jedem Prozess verwendet werden.
Sie können eine Registrierungsoptimierung vornehmen, um das Limit zu erhöhen.
Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Ändern Sie einfach den Pfad oder deklarieren Sie ihn in a string