2010-07-30 18 views
5

Deseo determinar la ruta absoluta de los archivos utilizados por un proceso conocido leyendo la línea de comando. Actualmente, el proceso se inicia con rutas relativas en la línea de comandos que apuntan a varios archivos, como los archivos de configuración. El problema es que si las rutas no son relativas a la carpeta que contiene el ejecutable, no tengo forma de convertir las rutas relativas proporcionadas en la línea de comandos, así que no puedo estar 100% seguro.C# Obtener el directorio de trabajo de otro proceso

Por ejemplo dos archivos por lotes:

LOTE 1 CD c: \ prueba \ bin test.exe .. \ config \ config.ini

LOTE 2 CD c: \ test bin \ test.exe config \ config.ini

Para el archivo por lotes uno, la línea de comando que obtengo es "c: \ test \ bin \ test.exe .. \ config \ config.ini" y para el archivo por lotes dos I obtener "c: \ test \ bin \ test.exe config \ config.ini". Entonces, mira esto, no puedo resolver los caminos.

De todos modos para los principiantes, obtuve la línea de comando de una consulta WMI usando ManagementObjectSearcher. Ahora necesito obtener el directorio de trabajo desde el que se inició el proceso para resolver las rutas pasadas en la línea de comandos, pero ¿cómo?

EDITAR: Olvidé un detalle clave. Quiero obtener el directorio de trabajo de otro proceso. Básicamente, mi programa principal recopila información de otro programa. Puedo determinar la identificación del proceso porque sé el nombre del ejecutable. También puedo determinar la línea de comando. Ahora debo encontrar el directorio de trabajo o el directorio actual en el que se inició el archivo ejecutable para poder resolver las rutas relativas de la línea de comando. Espero haber aclarado la pregunta.

+1

Creo que el título de la pregunta no es exactamente lo que estás pidiendo. "Obtener directorio de trabajo de proceso" es una cuestión del directorio de trabajo, que presumiblemente puede cambiar durante la ejecución, pero la pregunta en sí parece estar preguntando por el directorio desde el que se inició el ejecutable, que puede ser bastante diferente (y no cambia durante proceso de ejecución). La respuesta de @ chris166 aborda el título de su pregunta, pero mi respuesta aborda la pregunta en sí, en mi humilde opinión. Quizás puedas aclarar la confusión? – Cyberherbalist

Respuesta

7

Creo que Environment.CurrentDirectory debería darle el directorio en el que se inició el ejecutable. Solo es confiable al inicio del proceso, porque puede cambiar más adelante.

O tal vez intente Process.GetCurrentProcess().StartInfo.WorkingDirectory. No lo intenté yo mismo, lo busqué en MSDN

+0

Intenté todo esto en una aplicación de consola, y Environment.CurrentDirectory salió con el directorio en el que comenzó la aplicación, como pensaste que sería. Pero Process.GetCurrentProcess(). StartInfo.WorkingDirectory salió como una cadena vacía. Lo que me sorprendió, pensé que habría sido lo mismo. Un poco más de prueba mostró que si creaba un acceso directo al ejecutable, entonces modificaba la propiedad "Iniciar en" del acceso directo a algo (como "C: \"), entonces eso era lo que estaba entonces en el StartInfo.WorkingDirectory. – Cyberherbalist

1

¿Has probado Application.ExecutablePath?

Como alternativa, existen numerosas rutas que se pueden recuperan de Application

Cuestiones relacionadas