Frage

Ich habe eine App, mit der ich in einem Verzeichnis aus mehreren MSI (selbe MSI, verschiedenen Versionen) auswählen kann, und ich kann diese App installieren oder deinstallieren.

Ich fahre die Liste der MSIs mit vollem Weg mit vollem Weg mit

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

Von hier aus bevölkern ich eine Listansicht, und sobald eine ausgewählt ist, drücke ich auf die Taste Installation. Aber wenn ich meinen Installationscode durchgehe, scheint der wörtliche Verfahren zu vermasseln.

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

Auch wenn die ListView die Datei mit Single / das Endergebnis anzeigt

Irgendwo dort verliert es die buchstäbliche Schnur.

Wenn ich den Code ändere und ausführe Filename = @"msiexec.exe /i c: test test1.msi" Es funktioniert gut, aber ich muss in der Lage sein, aus einer Liste von Dateinamen auszuwählen.

Irgendwelche Ideen?

War es hilfreich?

Lösung

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

Verwenden Sie oben MSIFiles Array von Dateinamen, um die ListView zu bevölkern

Verwenden Path.combine wie nachstehend

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(); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top