C#Verbatim似乎不适用于.startinfo.arguments?

时间:2011-09-05 17:05:21

标签: c# wpf msiexec verbatim

我有一个应用程序,我可以从一个目录中选择多个MSI(相同的msi,不同版本),我将能够从这个应用程序安装或卸载。

我使用

输入完整路径的MSI列表
string MSILocation = @"C:\test\";
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.MSI", SearchOption.TopDirectoryOnly);

从这里我填充一个列表视图,一旦选择了一个,我点击安装按钮。 但是,当我查看我的安装代码时,逐字逐句似乎搞砸了。

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

即使listview显示带有单个/最终结果的文件,也总是带有double /

在那里它失去了文字字符串。

如果我更改代码并运行 .FileName = @“msiexec.exe / i C:\ test \ test1.msi”它工作正常,但我需要能够选择从文件名列表。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

使用上面MSIFiles个文件名数组来填充listview

使用Path.combine,如下所示

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();