Domanda

Ho un app con cui posso scegliere tra (stesso msi, versioni differenti) multipli di MSI in una directory, e sarò in grado di installare o disinstallare da questa applicazione.

I tirare nella lista dei MSI, completo di percorso completo, con

string MSILocation = @"C:\test\";
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.MSI", SearchOption.TopDirectoryOnly);

Da qui i popolare un ListView, e una volta che si è selezionato mi ha colpito il pulsante di installazione. Ma quando vado attraverso il mio codice di installazione, la Verbatim sembra rovinare.

string MSIname = lboMSIList.SelectedItem.ToString();
Process p = new Process();
p.StartInfo.FileName = "MSIEXEC.EXE";
p.StartInfo.Arguments = @"/i " + MSIname;
p.Start();

Anche se gli spettacoli ListView il file con singolo / il risultato finale viene sempre fuori con doppia /

Da qualche parte in là il suo perdere la stringa letterale.

Se cambio il codice e run .FileName = @ "msiexec.exe / i C: \ test \ test1.msi" funziona bene, ma ho bisogno di essere in grado di selezionare da un elenco di nomi di file.

Tutte le idee?

È stato utile?

Soluzione

string MSILocation = @"C:\test\"; 
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.*", SearchOption.TopDirectoryOnly).Select(f => Path.GetFileName(f)).ToArray();  

uso sopra gamma MSIFiles di nomi di file per popolare il listview

Path.Combine come di seguito

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(); 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top