我使用 GhostScriptSharp 构建了一个转换器,以通过网站生成 PDF 文件的整页图像,每当我调用 GenerateOutput() 时,gsdll32.dll 似乎保持锁定状态(以及它生成/工作的文件)。
我的代码片段:
GhostscriptSharp.GhostscriptWrapper.GenerateOutput(pdfFile, outputFile, settings);
调用此命令后,我立即将生成的字节保存到 Azure 上的 blob。完成后,我尝试致电:
try {
File.Delete(outputFile); // clean up if we can
}
catch { }
这会引发异常,因为文件仍处于锁定状态。
然后,当我尝试再次构建(通过 F5 甚至在实时情况下)时,我收到一条错误消息,指出它无法将 gsdll32.dll 复制到我的 bin 文件夹,因为它已被锁定。
我对照Ghostscript API检查了 GhostScriptSharp ,似乎一切都以正确的顺序调用。不过,我无法解释为什么 IIS 会锁定 gsdll32.dll。
有人遇到过这个吗?我似乎找不到任何有类似问题的人。
更新:我尝试在上面的 catch 中第二次调用 ExitAPI/DeleteAPI,以防由于某种原因它没有第一次调用,并且它抛出了一个AccessViolationException
. 所以看起来API正在正确退出,我猜只是IIS没有正确释放锁?