Что вызывает ghostscript для возврата ошибки -100?
-
30-09-2019 - |
Вопрос
Итак, я использую Matthew Ephraim's GhostscriptScriptSharp, который является простым C # оберткой для неуправляемого Ghostscript DLL Win32 в моем проекте ASP.NET MVC. Несколько фон:
То, что я пытаюсь сделать, у него есть пользователь загрузка PDF, а затем преобразовать этот документ в изображение, которое я могу затем сохранить, в любой каталог, который я выбираю (а также другой OOP, чтобы привязать это новое изображение на мой сайт) Отказ
Я решил использовать класс Wrapper г-на Эфраим (GhostscriptSharp), потому что он был достаточно простым для использования, и он дает мне относительно чистый доступ к API DLL.
Чтобы проверить его, я создал приложение Console Bummy C #, чтобы убедиться, что я смогу загрузить DLL, доступа к ней, переведите его PDF-файл на локальном диске, а затем записать jpg к тому же локальному диску. После нескольких опытов обучения у меня был успех. Я бы передал его c: input.pdf, это будет передавать мне c: adduct.jpg.
Однако после интеграции кода GhostscriptSharp, в котором я имел в приложении консоли в моем проекте MVC MVC ASP.NET до такой степени, что я вызывал DLL с P / Invoke, Ghostscript возвращается с кодом Int / Error -100
, что является фатальной ошибкой (называется E_Fatal
В исходный код Ghostscript). Я получаю тот же результат с обоим файлом, который загружается через HTML-форму, и если я передаю ему то же самое жестко закодированные пути, которые я использовал в моем рабочей консоли.
Для справки, линии, которые выдают исключение, составляет 93-97 в GhostscriptSharp.cs (который находится в CallApi
Функция):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
Очевидно, что исключение брошено, потому что result
является -100
.
Когда initapi вызывается, экземпляр PTR является действительным int
(хотя я не знаю, если экземпляр GS правильный или нет), args имеет длину 20 (это string[]
) действительных параметров Ghostscript (включая правильно сбежавшие пути к моим входным и выходным файлам).
Долгая история короткая, что я делаю не так? Код ошибки -100
Похоже, что улов все, потому что нет документации, которая гласит, что может идти неправильно здесь.
Любая помощь очень ценится, заранее спасибо.
Решение 3
Итак, оказался ошибкой ID10T, которая сгорала меня здесь в этом конкретном экземпляре.
В CodeScriptScriptScriptScriptScriptScriptScriptScriptScriptscriptScarp, он использует пару евро, чтобы определить параметры, изложенные для Ghostscript, и два, в частности, были GhostscriptDevices
а также GhostscriptPageSizes
enums. Проблема в том, что они написаны Resharper (плагин Visual Studio Jetbrains) имеет правила по умолчанию для именования членов Enum. Не думая, я исправил все эти определения, чтобы понравиться, не осознавая, что они передаются непосредственно к призраку, поэтому вместо того, чтобы получить a7
для -sPAPERSIZE
GS становился A7
, и для -sDEVICE
Это было получено Jpeg
вместо jpeg
.
Пока разрешения не было проблемой на моем концом, но только потому, что запустите тестовый сервер Cassini Web DEV в Visual Studio.
Благодаря @markdeman и @tvanfosson за их полезные предложения!
Другие советы
Ошибка -100 - это общая «фатальная ошибка» в ghostscript.
Несколько вещей, чтобы проверить:
1) Разрешения (AL Операции требуют доступа к файлу)
2) Область применения, вы хотите добавить папку Bin GS в переменные пути
3) Рассмотрим не вызывать Ghostscript непосредственно из ASP.NET, GS может быть очень процессором интенсивным, скорее процессы в отдельном сервисе
Я также создал обертку, пришлите мне электронное письмо (адрес в профиле), и я отправлю его вам. Это позволяет пропустить в папке GS Bin, которая помогает.
Скорее всего, процесс, выполняющий процесс веб-приложения, не имеет разрешения на запись в каталоги, которые вы используете. Я бы предложил создать какой-то конкретный каталог для приложения для использования и локального идентификатора, используемого для запуска пула приложений, затем дайте этому идентификатору привилегии для чтения / записи каталога, который вы создали.