C# 尝试从ASP.NET应用程序运行命令行工具时出现意外结果

C# 尝试从ASP.NET应用程序运行命令行工具时出现意外结果,c#,asp.net,windows,iis,C#,Asp.net,Windows,Iis,可能重复: 背景: 我试图使用phantomjs工具将SVG光栅化为PNG。当我自己手动运行EXE时,它可以工作,但我无法通过C#中的方法使其工作。我甚至设置了断点来确保我的路径和参数是正确的 该方法首先将SVG保存到file:///C:/SVG/-它成功地做到了这一点。然后我尝试运行位于ASP.NET项目中的EXE(该工具使用的.js文件也在那里)。如果选中上面的链接,EXE的运行方式如下:phantomjs.EXE rasterize.js[source][destination]。因此,

可能重复:

背景:

我试图使用phantomjs工具将SVG光栅化为PNG。当我自己手动运行EXE时,它可以工作,但我无法通过C#中的方法使其工作。我甚至设置了断点来确保我的路径和参数是正确的

该方法首先将SVG保存到
file:///C:/SVG/
-它成功地做到了这一点。然后我尝试运行位于ASP.NET项目中的EXE(该工具使用的.js文件也在那里)。如果选中上面的链接,EXE的运行方式如下:
phantomjs.EXE rasterize.js[source][destination]
。因此,我的源是新创建的SVG文件,目标是ASP.NET项目中的一个文件夹,即EXE所在的文件夹。我猜这与Server.MapPath或IIS权限有关,但我被难住了

代码如下:

// the EXE and the .js file are both located in 'ProjectRoot/Utilities/'
// filename is the newly created SVG file - 'whatever.svg'
string filepath = "C:/SVG/";
string serverPath = Server.MapPath("/Utilities/");
string args = " rasterize.js " + Path.Combine("file:///", filepath, filename) + " " + filename.Replace(".svg", ".png");
Process p = Process.Start(new ProcessStartInfo(serverPath + "phantomjs.exe", args));
p.WaitForExit(3000);

运行它不会引发异常,只是无法创建PNG文件。当我调试并获取这些值并自己运行该工具时,它工作得很好。如何缩小问题范围?

相同代码的调试/发布运行之间的差异通常是由以下原因造成的。在这种情况下,在调用Process.Start之前,创建SVG的代码可能尚未完成执行,因此不会发生任何事情。

这是在服务器上运行还是在本地计算机上运行?本地计算机,但我使用IIS并指向127.0.0.1。我们将在IIS上线后托管它,以便我可以根据需要配置IIS。了解进程是否正在生成您看不到的有用输出将非常有用。有关如何捕获
进程的输出的信息,请参见。工作进程是否可能没有写入目标目录的权限?您应该编辑您的旧问题,而不是发布一个细节稍有更改的非常类似的问题。即使我单步执行并让创建SVG的代码完成,它仍然会失败执行。