Parece trivial, pero la respuesta se me escapa por unos días.Cambiando las variables de entorno del proceso de llamada
Tengo un archivo por lotes de Windows que llama a un programa C# para realizar una verificación adicional que no se puede realizar en un archivo por lotes. Una vez completada la verificación, debo devolver un estado y una cadena al shell de llamada.
Ahora el valor de retorno es trivial y mi aplicación de consola C# simplemente establece un valor de retorno (código de salida si lo desea). Y pensé que la cuerda también sería un pedazo de pastel. Me trató de definir una nueva variable de shell mediante el:
Environment.SetEnvironmentVariable("ERR", "Some text");
Esta llamada debe (y lo hace) definir una variable de entorno dentro del proceso actual - que es el proceso de C# que creó el muy variable. El valor se pierde tan pronto como finaliza la aplicación C# y el shell que creó la aplicación C# no sabe nada sobre la variable. Entonces ... Una llamada sin un uso particular ... En absoluto ... A menos que tal vez si crease un proceso hijo desde la aplicación C3, tal vez heredaría mis variables.
Los objetivos EnvironmentVariableTarget.Machine y EnvironmentVariableTarget.User para la llamada SetEnvironmentVariable tampoco resuelven el problema, ya que solo un proceso creado recientemente obtendrá estos nuevos valores del registro.
Así que la única solución de trabajo que se me ocurre es:
- de escritura a la salida estándar
- escribir en un archivo
- codificar significado adicional en el valor de retorno
Los dos primeros son un poco feos y el último tiene sus limitaciones y problemas.
¿Alguna otra idea (cómo establecer una variable de shell en el proceso principal)? Tal vez tales modificaciones de la variable de shell son un problema de seguridad (piense en PATH) ...
Gracias por su tiempo.
Eso es cierto. El resultado de una aplicación de consola generalmente se devuelve a través del código de retorno. Aparentemente el 'Environment.Exit()' es un poco áspero en el marco ... por lo que un simple 'return x' es el método preferido. Sin embargo, me preguntaba si hay un método en el que podría insertar ** otro valor ** en el entorno del shell primario. Por ejemplo, la explicación del código de error 123 en forma de una cadena ... estoy usando la salida estándar en este momento ... redirección a un archivo, lo leyó de nuevo a una concha var, borrar el archivo ... Ligeramente sucio, pero funciona. – JamesH