包含空格的Process.Start参数在XP上有问题吗?

以下代码片段在Windows Vista或Windows 7上运行良好,但在XP上运行不正常:

String filename = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), ".html"); [...write file...] System.Diagnostics.Process.Start("excel.exe", "\"" + filename + "\""); 

问题是,在Windows XP上, filename包含空格(“c:\ documents and settings …”),因此在XP Excel上只显示错误“无法打开c:\ documents.xls”。

在Windows Vista和7上,当我将路径/文件名设置为包含空格的内容时,它甚至可以工作。

有没有办法更改参数,以便它也将在Windows XP上打开,或者我是否必须更改所有客户端计算机上的临时目录?

我的WinXP x64 SP2上没有Excel,但记事本甚至没有引号:

 string filename = Path.ChangeExtension(Path.GetTempFileName(), ".html"); File.AppendAllText(filename, "Test"); System.Diagnostics.Process.Start("notepad.exe", filename); 

但如果它不适合你,我认为值得尝试设置工作目录并仅提供文件名:

 string filename = .Path.ChangeExtension(Path.GetTempFileName(), ".html"); File.AppendAllText(filename, "Test"); System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() { Arguments = Path.GetFileName(filename), WorkingDirectory = Path.GetDirectoryName(filename), FileName = "excel.exe" }); 

尝试使用:

 Process excelProcess = new Process(); excelProcess.StartInfo.FileName = "excel.exe"; excelProcess.StartInfo.Aguments = "\"" + filename + "\""; excelProcess.Start(); 

我知道这段代码适用于文件名中的空格。

如果excel.exe是系统上xls文件扩展名的默认可执行文件,则可以使用:

 Process.Start(filename) 

或者,您可以尝试查找简短的8.3样式路径名称并将其用作参数。