Vi el otro tema y estoy teniendo otro problema. El proceso está comenzando (vi en el administrador de tareas) pero la carpeta no se abre en mi pantalla. Que pasa
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Vi el otro tema y estoy teniendo otro problema. El proceso está comenzando (vi en el administrador de tareas) pero la carpeta no se abre en mi pantalla. Que pasa
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Respuestas:
¿Se ha asegurado de que la carpeta " c:\teste
" existe? Si no es así, el explorador se abrirá mostrando alguna carpeta predeterminada (en mi caso " C:\Users\[user name]\Documents
").
Actualizar
He intentado las siguientes variaciones:
// 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");
Si ninguno de estos (bueno, excepto el que arroja una excepción) funciona en su computadora, no creo que el problema radique en el código, sino en el entorno. Si ese es el caso, probaría uno (o ambos) de los siguientes:
Process.Start(path)
activa la ventana (solo puede parpadear en la barra de tareas, no se muestra al frente); explorer.exe
El parámetro + abre una nueva ventana siempre en el frente (pero varias veces la misma ventana). Entonces ambos tienen advertencias.
Process.Start(@"c:\temp")
debe usarse con precaución. Si c:\temp.com
existe, se abrirá la llamada a la función c:\temp.com
. Ver foros.iis.net/p/1239773/2144186.aspx para más detalles.
Process.Start(@"c:\temp")
es susceptible de abrir una carpeta diferente como C:\temp.exe
o C:\temp.cmd
. Vea este problema donde VS mismo exhibe un comportamiento defectuoso . Puede evitar esto utilizando la explorer.exe
variante o (mejor, IMO) siempre agregando a Path.DirectorySeparatorChar
. Por ejemplo, Process.Start(@"C:\temp\")
.
Solo para completar, si todo lo que desea hacer es abrir una carpeta, use esto:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Asegúrese de que FileName finalice Path.DirectorySeparatorChar
para que señale sin ambigüedad a una carpeta. (Gracias a @binki.)
Esta solución no funcionará para abrir una carpeta y seleccionar un elemento, ya que no parece un verbo para eso.
C:\teste.exe
o C:\teste.cmd
existe, Explorer se abrirá en esa otra carpeta en lugar de la que deseaba. Para evitar esto, puede agregar un Path.DirectorySeparatorChar
a la ruta. Vea cómo VS mismo comete el mismo error .
Verb = "select"
, pero lamentablemente no puedes. De todos modos, gran respuesta!
Verb = "open"
no fue necesaria. (Probado en Windows, otros sistemas operativos pueden diferir.)
.Verbs
propiedad en ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Estás utilizando el símbolo @, que elimina la necesidad de escapar de las barras diagonales inversas.
Elimine la @ o reemplace \\ con \
No necesita la doble barra invertida cuando utiliza cadenas sin escape:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Debe usar una de las System.Diagnostics.Process.Start()
sobrecargas. ¡Es bastante simple!
Si no coloca el nombre de archivo del proceso que desea ejecutar ( explorer.exe
), el sistema lo reconocerá como una ruta de carpeta válida e intentará adjuntarlo al proceso del Explorador que ya se está ejecutando. En este caso, si la carpeta ya está abierta, Explorer no hará nada.
Si coloca el nombre de archivo del proceso (como lo hizo), el sistema intentará ejecutar una nueva instancia del proceso, pasando la segunda cadena como parámetro. Si la cadena es una carpeta válida, se abre en el proceso recién creado, de lo contrario, el nuevo proceso no hará nada.
No sé cómo el proceso trata las rutas de carpetas no válidas en ningún caso. Usar System.IO.Directory.Exists()
debería ser suficiente para asegurar eso.
Path.DirectorySeparatorChar
. De lo contrario, si también existe una carpeta con el mismo nombre pero .cmd
/ .exe
o posiblemente otros sufijos, Explorer se abrirá en esa otra carpeta, o si en realidad son ejecutables o scripts, los ejecutará en lugar de abrir la carpeta como deseaba.
Use una versión sobrecargada del método que toma una instancia de ProcessStartInfo y establezca la propiedad ProcessWindowStyle en un valor que funcione para usted.
Estás escapando de la barra invertida cuando el signo at lo hace por ti.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Este código funciona bien desde el entorno VS2010 y abre la carpeta local correctamente, pero si aloja la misma aplicación en IIS e intenta abrir, entonces fallará con seguridad.
Acabo de tener este problema y descubrí por qué. mi razón no aparece aquí, así que cualquier otra persona que tenga este problema y ninguno de estos lo solucione.
Si ejecuta Visual Studio como otro usuario e intenta usar Process.Start, se ejecutará en el contexto de ese usuario y no lo verá en su pantalla.
Extraño.
Si no puede encontrar explorer.exe, debería obtener una excepción. Si no puede encontrar la carpeta, aún debería abrir alguna carpeta (por ejemplo, mis documentos)
Dice que aparece otra copia del Explorador en el administrador de tareas, pero no puede verla.
¿Es posible que se esté abriendo fuera de la pantalla (es decir, otro monitor)?
¿O por casualidad estás haciendo esto en un servicio no interactivo?
¿Se abre correctamente cuando ejecuta "explorer.exe c: \ teste" desde su menú de inicio? ¿Cuánto tiempo has estado intentando esto? Veo un comportamiento similar cuando mi máquina tiene muchos procesos y cuando abro un nuevo proceso (los conjuntos dicen IE) ... comienza en el administrador de tareas pero no aparece en el front-end. ¿Has intentado reiniciar?
El siguiente código debería abrir una nueva instancia de explorador
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
¿Tiene muchas aplicaciones ejecutándose cuando intenta esto? A veces encuentro un comportamiento extraño en el trabajo porque mi sistema se queda sin controladores GDI ya que tengo muchas ventanas abiertas (nuestras aplicaciones usan mucho).
Cuando esto sucede, las ventanas y los menús contextuales ya no aparecen hasta que cierro algo para liberar algunos identificadores GDI.
El límite predeterminado en XP y Vista es 10000. No es raro que mi DevStudio tenga 1500 identificadores GDI, por lo que si tiene un par de copias de Dev Studio abiertas, puede consumirlas con bastante rapidez. Puede agregar una columna en el Administrador de tareas para ver cuántos identificadores está utilizando cada proceso.
Hay un ajuste de registro que puede hacer para aumentar el límite.
Para obtener más información, consulte http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Simplemente cambie la ruta o declare en un string