2015-01-14 2 views
1

IIS에서 Process.Start("DocToPDF.exe", "file.docx file.pdf")을 성공적으로 호출 할 수 없습니다.프로세스 IIS 서버 시작

  • IIS Admin Service에서 데스크톱 상호 작용을 허용하려고 시도했습니다.
  • 나는이의

아무도 일하지 않는 DocToPDF.exe를 포함하는 디렉토리을 DefaultAppPool에 대한 모든 권한을 부여 노력했다. DocToPDF.exe는 코드 1로 종료됩니다 (파일에 종료 코드를 씁니다 ...). 웹 사이트를 디버그 모드 (F5)로 실행하면 프로그램이 코드 0으로 종료되고 모든 것이 정상입니다. 디버그 모드에서 완벽하게 작동합니다. 내 생각 엔 Visual Studio에서 응용 프로그램을 시작할 때 잘 작동한다고했기 때문에 IIS 사용 권한과 관련이 있습니다.

public byte[] DocToPdf(MemoryStream ms) 
{    
    string fileName = Guid.NewGuid().ToString(); 
    string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\" + fileName + ".docx"; 
    string newPath = path.Replace("docx", "pdf"); 
    FileStream fs = new FileStream(path.ToString(), FileMode.OpenOrCreate); 
    fs.Write(ms.ToArray(), 0, ms.ToArray().Length); 
    fs.Close(); 

    Process p = new Process(); 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.FileName = @"C:\Utils\OfficeToPDF.exe"; 
    p.StartInfo.Arguments = path + " " + newPath; 
    p.Start(); 
    p.WaitForExit(); 
    System.IO.File.WriteAllText(@"C:\Utils\exitcode.txt", p.ExitCode.ToString()); 

    var bytes = System.IO.File.ReadAllBytes(newPath); 

    System.IO.File.Delete(path); 
    System.IO.File.Delete(newPath); 

    return bytes;    
} 
+0

http://stackoverflow.com/questions/8414514/iis7-does-not-start-my-exe-file-by-process-start similar questions. –

+0

응용 프로그램 풀 ID (http://www.iis.net/learn/manage/configuring-security/application-pool-identities)를 확인하십시오. 로컬 로그온 권한이 있습니까? 'c : \ utils' 폴더에 대한 권한이 있습니까? % AppData % 폴더에 대한 권한이 있습니까? – jessehouwing

+0

은 @jessehouwing과 동의했습니다 - apppool에서 사용중인 프로필/사용자 계정과 관련이 있습니다. 올바른 권한이 필요합니다. 기본적으로 제한적입니다. 표준 OOB 응용 프로그램 풀 사용자 계정 (ApplicationIdentity 내가 생각하는 것)보다 많은 권한을 가진 사용자 계정을 만들어야 할 수도 있습니다. 프로세스를 실행할 권한이 없을 수도 있습니다. –

답변

3

거의 항상 IIS 웹 사이트/응용 프로그램에서 모든 프로세스를 호출하는 끔찍한 생각입니다 : 여기

은 내가 사용하고있는 방법이다.

  1. IIS 및 해당 작업자 프로세스는 세션 0에서 실행됩니다. 세션 격리는 사용자 세션에서 추가 실행 파일을 실행해야하는 경우 문제가 될 수 있습니다. 실행 파일이 인쇄 드라이버를 사용하려고 시도 할 때 세션 0에서 문제가 발생할 수있는 것처럼 이것을 치는 경우가 많습니다.
  2. IIS 작업자 프로세스가 응용 프로그램 풀 ID로 실행되고 있습니다 풀 설정 변경). 이러한 종류의 ID는 실행 파일이 정상적인 사용자 계정을 필요로하기 때문에 실패로 이어질 수 있습니다.

IIS에서 실행할 수있는 실행 파일이 너무 많아서 새 파일이나 일반적인 파일이 아닙니다.

Visual Studio에서 F5를 누르면 응용 프로그램이 ASP.NET 개발 서버 또는 IIS Express에서 기본적으로 실행되고 이 사용자 세션에 실행됩니다. IIS로 전환 할 때 아무 문제없이 작동합니다. 따라서 IIS/Windows에 대해 얼마나 조금이라도 알고 있는지 놀랄 일이 아닙니다. 모든 전문가는 초보자였습니다.

일반적인 해결 방법은 Microsoft 또는 타사 공급 업체가 지원하거나 권장하는 대체 방법을 찾는 것입니다. 무료 및 오픈 소스는 일반적으로 이러한 세션 0을 염두에 두지 않고 개발되거나 테스트되며, 생각보다 많은 문제가 발생할 수 있습니다.