Question

J'ai une application avec laquelle je peux choisir parmi plusieurs (même msi, versions différentes) de MSI dans un répertoire, et je vais pouvoir installer ou désinstaller de cette application.

Je tire dans la liste des MSI, avec le chemin complet, avec

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

A partir de là je remplir un ListView, et une fois que l'on est sélectionné i cliquez sur le bouton Installer. Mais quand je vais dans mon code d'installation, le verbatim semble bousiller.

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

Même si ListView montre le fichier avec un seul / le résultat final est toujours avec double /

Quelque part là-dedans la perte de la chaîne littérale.

Si je change le code et exécuter .FileName = @ "msiexec.exe / i C: \ test \ test1.msi" il fonctionne très bien, mais je dois pouvoir choisir à partir d'une liste de noms de fichiers.

Toutes les idées?

Était-ce utile?

La solution

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

utilisation ci-dessus tableau MSIFiles des noms de fichiers pour remplir le ListView

Path.Combine comme ci-dessous

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(); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top