C# wörtlich scheint nicht mit .StartInfo.Arguments zu arbeiten?
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?
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();