Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进程。包含空格的启动参数在XP上有问题吗?_C#_.net - Fatal编程技术网

C# 进程。包含空格的启动参数在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上,文件名

以下代码段在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上,
文件名包含空格(“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