C# 进程。包含空格的启动参数在XP上有问题吗?
以下代码段在windows vista或windows 7上运行良好,但在XP上运行不好:C# 进程。包含空格的启动参数在XP上有问题吗?,c#,.net,C#,.net,以下代码段在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上,文件名
String filename = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), ".html");
[...write file...]
System.Diagnostics.Process.Start("excel.exe", "\"" + filename + "\"");
问题是,在Windows XP上,文件名包含空格(“c:\documents and settings…”),所以在XP Excel上显示错误“无法打开c:\documents.xls”
在WindowsVista和Windows7上,当我将路径/文件名设置为包含空格的内容时,它甚至可以工作
是否有办法更改参数,使其也能在windows XP上打开,或者我必须更改所有客户端计算机上的临时目录?如果excel.exe
是系统上xls
文件扩展名的默认可执行文件,您可以使用:
Process.Start(filename)
或者,您可以尝试查找短的8.3样式路径名并将其用作参数。尝试使用:
Process excelProcess = new Process();
excelProcess.StartInfo.FileName = "excel.exe";
excelProcess.StartInfo.Aguments = "\"" + filename + "\"";
excelProcess.Start();
我知道这段代码可以在文件名中使用空格。我的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"
});
您不应该使用”
而不是“
?您在不同的XP机器上试用过吗?我看到一些XP机器的DDE和打开文件被破坏了,所以你甚至不能从命令行或windows资源管理器在XP中打开文件。哎呀,Leppie,我来检查一下,谢谢@山姆:为什么错误状态是documents.xls?至少应该有一个html扩展吗?Excel中是否有启动时运行的宏/加载项无法处理文件路径中的空格?是否尝试在Excel中手动打开临时文件?@0xA3,Excel仅在第一个空格(c:\documents)之前获取参数,并且由于不存在扩展名,因此会添加默认扩展名。不存在宏/加载项,如果使用没有空格的目录,则启动有效。手动打开文件也可以。如果您阅读了我的示例,您会注意到我的文件扩展名不是xls,而是html。但我仍然希望excel打开文件,而不是浏览器,因此我无法使用您的调用版本。有任何线索可以从GetTempFileName中获取的路径/名称获取8.3文件名吗?抱歉,错过了。事实上,我读过你的问题和例子,只是懒得滚动。我能找到的所有例子都使用P/Invoke,例如,你的代码在XP上使用空格吗?在Vista/7上,我的版本在构造函数上有文件名和参数,也可以。@Sam-是的-我仔细检查了一下,只是为了确定:)我刚刚复制了你的第一个示例(将notepad.exe
改回excel.exe
)并运行了它。在32位WinXP上也可以正常工作。你的临时目录是否包含空格?或者它被更改为没有空格的路径?这些是我得到的文件,正如预期的:-C:\Documents and Settings\myname\Local Settings\Temp\tmp15.tmp(0字节)C:\Documents and Settings\myname\Local Settings\Temp\tmp15.html(4字节)@Sam:它确实包含空格。我刚刚检查了一下,结果是C:\Documents and Settings\Regent\Local Settings\Temp\tmpCF2.html
@Sam:但是您是否尝试过设置WorkingDirectory
?