Limpiar la transmisión de una lista de argumentos a ProcessStartInfo.
Los argumentos se reciben como string[]
en un programa nuevo. Ya están parseados correctamente, por lo que las comillas mantendrán un parámetro junto, incluso si es una ruta que contiene espacios. Muy bien.
Ahora quiero enviarlos a un nuevo Process
, pero ProcessStartInfo
solo admite string
para definir los argumentos.
Así que concatenarlos con espacios es incorrecto, ya que las rutas pueden entonces dividirse en varios argumentos. También tengo dudas si envolverlos en comillas y luego concatenarlos con espacios funciona en todos los casos, no creo que así sea, ya que el programa de destino puede no ver -u
y "-u"
como equivalentes. ¿Existe una forma limpia de hacer esto en el Framework .NET?
davy.ai
Sí, existe una forma limpia de hacer esto en el Framework .NET. Puede utilizar la clase ‘ProcessStartInfo’ y configurar su propiedad ‘Arguments’ para que contenga un ‘string’ formateado correctamente utilizando la función ‘CommandLineToArgvW’ de la API Win32. Esta función maneja correctamente los argumentos que contienen espacios y comillas dobles, así como también escapa los caracteres que deben ser escapados.
Aquí hay un ejemplo de cómo utilizar este enfoque:
Y aquí está la implementación de la función ‘CommandLineToArgvW’:
Con este enfoque, puede pasar de manera segura los argumentos recibidos a un nuevo ‘Process’ sin tener que preocuparse por divisiones o formatos incorrectos.