C# literalmente no parece funcionar con .Startinfo.arguments?
Pregunta
Tengo una aplicación con la que puedo seleccionar entre múltiples MSI (las mismas versiones MSI, diferentes versiones) en un directorio, y podré instalar o desinstalar desde esta aplicación.
Entrego la lista de MSI, completa con una ruta completa, con
string MSILocation = @"C:\test\";
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.MSI", SearchOption.TopDirectoryOnly);
Desde aquí, pueblo una vista de lista, y una vez que se selecciona uno, presiono el botón Instalar. Pero cuando reviso mi código de instalación, el literario parece arruinar.
string MSIname = lboMSIList.SelectedItem.ToString();
Process p = new Process();
p.StartInfo.FileName = "MSIEXEC.EXE";
p.StartInfo.Arguments = @"/i " + MSIname;
p.Start();
A pesar de que el ListView muestra el archivo con el resultado único / final siempre sale con el doble /
En algún lugar allí está perdiendo la cuerda literal.
Si cambio el código y ejecuto .FileName = @"msiexec.exe /i c: test test1.msi" Funciona bien, pero necesito poder seleccionar de una lista de nombres de archivo.
¿Algunas ideas?
Solución
string MSILocation = @"C:\test\";
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.*", SearchOption.TopDirectoryOnly).Select(f => Path.GetFileName(f)).ToArray();
usar arriba MSIFiles
matriz de nombres de archivo para completar la vista de lista
Usar Path.combine como a continuación
string MSILocation = @"C:\test\";
string MSIname = lboMSIList.SelectedItem.ToString();
Process p = new Process();
p.StartInfo.FileName = "MSIEXEC.EXE";
p.StartInfo.Arguments = string.Format(
"{0} {1}", @"/i",Path.Combine(MSILocation , MSIname );
p.Start();