0

可能重复:
Server.MapPath 并从 ASP.NET 应用程序运行命令行实用程序

背景:

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

4

1 回答 1

0

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

于 2012-10-14T09:58:19.537 回答