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?

¿Fue útil?

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(); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top