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

时间:2012-10-14 09:48:28

标签: c# asp.net windows iis

  

可能重复:
  Server.MapPath and running a command line utility from an ASP.NET application

背景:

我正在尝试使用this 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文件。当我调试并获取值并自己运行该工具时,它工作正常。我该怎么做才能缩小问题范围?

1 个答案:

答案 0 :(得分:0)

相同代码的调试/发布运行之间的差异通常由a race condition引起。在这种情况下,创建SVG的代码可能在您调用Process.Start之前没有完成执行,因此没有任何反应。