2010-12-02 5 views
13

그래서, ASP.Net MVC 프로젝트의 관리되지 않는 Win32 Ghostscript DLL에 대한 간단한 C# 래퍼 인 Matthew Ephraim's GhostscriptSharp을 사용하고 있습니다. 일부 배경 :Ghostscript가 -100의 오류를 반환하게하는 원인은 무엇입니까?

내가 시도한 것은 사용자가 PDF를 업로드 한 다음 해당 문서를 내가 선택한 디렉토리에 저장할 수있는 이미지로 변환하는 것입니다 (뿐만 아니라 다른 OOP를 묶어 야합니다 새 이미지를 내 사이트로 가져옴).

Ephraim 씨의 래퍼 클래스 (GhostscriptSharp)를 사용하기에 충분히 간단하기 때문에 사용하기가 쉽고 DLL API에 대한 비교적 깨끗한 액세스를 제공합니다.

테스트를 위해 DLL을로드하고 액세스하고 로컬 디스크에 PDF 파일을 전달한 다음 동일한 로컬 디스크에 JPG를 기록하도록 더미 C# 콘솔 응용 프로그램을 만들었습니다. 약간의 학습 경험 후, 나는 성공했다. 나는 그것을 C : \ INPUT.pdf라고 할 것이고, C : \ OUTPUT.jpg를 나에게 건네 줄 것이다.

그러나 콘솔 응용 프로그램에 있던 GhostScriptSharp 코드를 내 ASP.NET MVC 프로젝트에 통합하여 P/invoke로 DLL을 호출 한 지점으로 Ghostscript가 int/error 코드 -100과 함께 반환됩니다 이는 치명적인 오류입니다 (GhostScript 소스 코드에서 E_Fatal). HTML 폼을 통해 업로드 된 파일과 동일한 작업 결과를 얻었습니다. 작업 콘솔 응용 프로그램에서 사용한 것과 동일한 하드 코딩 된 경로를 전달하면됩니다. 참고로

, 예외가 발생 된 라인 (CallApi 함수이다) GhostScriptSharp.cs에서 93-97 같습니다 result-100 때문에

int result = InitAPI(gsInstancePtr, args.Length, args); 

if (result < 0) { 
    throw new ExternalException("Ghostscript conversion error", result); 
} 

분명 예외가 발생된다.

InitAPI가 호출 될 때 인스턴스 ptr은 유효한 int (GS의 인스턴스가 맞는지 여부는 모르겠지만)이고 args의 길이는 유효한 GhostScript 옵션 20 자 (string[])입니다 내 입력 & 출력 파일에 올바르게 이스케이프 된 경로 포함).

길게 짧게, 내가 뭘 잘못하고 있니? 오류 코드 -100은 잡동사니처럼 보입니다. 여기에 잘못 될 수있는 내용을 설명하는 문서가 없기 때문입니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

3

그래서이 특정 사례에서 나를 탈선시키는 ID10T 오류가 발생했습니다.

Matthew Ephraim의 GhostscriptSharp 코드에서 그는 Ghostscript에 대해 설명 된 옵션을 정의하기 위해 두 개의 enum을 사용하고 두 개는 특히 GhostscriptDevicesGhostscriptPageSizes enum입니다. 문제는 작성 방법 Resharper (Jetbrains Visual Studio 플러그인)는 열거 형 멤버의 이름을 지정하는 기본 규칙을가집니다. Resharper가 Ghostscript에 직접 전달된다는 사실을 깨닫지 못하고 Resharper가 GS에 대한 a7을 가져 오는 대신 A7을 받고, -sDEVICE에 대해 jpeg이 아닌 -sDEVICE을 얻으 려했다.

당분간은 Visual Studio에서 Cassini 웹 개발 테스트 서버를 실행했기 때문에 권한이 내 문제가 아니 었습니다.

@MarkRedman 및 @tvanfosson에게 도움을 주신 점에 감사드립니다.

3

웹 응용 프로그램을 실행하는 프로세스에는 사용중인 디렉토리에 쓸 수있는 권한이 없을 가능성이 큽니다. 응용 프로그램 풀을 실행하는 데 사용할 응용 프로그램과 로컬 ID를 사용할 특정 디렉터리를 만든 다음 해당 ID에 작성한 디렉터리를 읽고 쓸 수있는 충분한 권한을 부여하는 것이 좋습니다.

+0

하나, 로컬 사용자의 권한으로 작동하는 ASP.Net 개발 서버로 웹 응용 프로그램을 실행하고 있다면 로컬 컴퓨터의 관리자이고 그 파일은 ... 둘째, 이전에 GhostscriptSharp를 사용하기 전에 응용 프로그램에서 PDF와 JPG가 들어있는 특정 디렉토리가 만들어지기 때문에 올바른 쓰기 권한이 있다는 것을 나타낼 수 있습니까? – Mattygabe

+0

@Mattygabe - 당신이 카시니에서 뛰는 한 사실입니다. 무엇이 문제 일 수 있는지 확실하지 않습니다. – tvanfosson

10

-100 오류는 GhostScript의 일반적인 "치명적 오류"입니다.

몇 가지

확인 사항 :

1) 권한 (알 작업은 파일 액세스를 필요로)

2) 범위, 당신은 PATH 변수에 GS bin 폴더를 추가 할

3) asp에서 직접 GhostScript를 호출하지 마십시오.그물, GS는 매우 CPU 집약적 인, 오히려 별도의 서비스에 파일을 처리 할 수 ​​있습니다

나는 또한 래퍼를 만들었습니다, 나에게 이메일 (프로필의 주소)를 보내, 내가 당신을 보낼 것입니다. 도움을주는 GS bin 폴더에 전달할 수 있습니다.

+0

사용 권한을 확인하는 데 필요한 사용자 계정은 무엇입니까? IIS_IUSRS 사용자 그룹에있는 것과 비슷한 것이 있습니까? – Mattygabe

+0

예 응용 프로그램 풀 (IIS 사용자/작업 그룹에 추가 된 명명 된 사용자 사용)과 동일한 응용 프로그램을 실행하는 데 사용 된 사용자 계정입니다.이 사용자는 파일이 생성되는 폴더에 대한 올바른 사용 권한이 있어야합니다 (모두 시도하십시오/테스트 할 수있는 전체 권한) HTH –

+0

또한 GS를 설치할 때 설치의 "모든 사용자 용"을 선택하고 시스템의 % PATH % 환경 변수에 GS bin 폴더를 추가합니다 ... –