2017-10-20 11 views
0

클라이언트의 WinForms 응용 프로그램을 웹 서비스로 마무리하기 위해 작업하고 있습니다. 이상적인 것은 아니지만 지금은 유일한 선택입니다.웹 서비스에서 WinForms 응용 프로그램을 시작할 수없는 이유는 무엇입니까?

WinForms 응용 프로그램은 사용자가 처리하고 반환 할 수있는 출력 파일을 생성 할 수있는 매개 변수를 사용하여 명령 줄을 통해 호출 할 수 있습니다. 이 명령 행 인터페이스는 기본적으로 GUI를 시작하고 명령 행 매개 변수를 통해 제공된 일부 입력 필드를 미리 채우고 출력 파일을 생성 한 후 종료합니다.

웹 서비스에서 Process.Start()를 사용하여 응용 프로그램을 실행하고 종료 될 때까지 기다린 다음 출력 파일을 처리하여 클라이언트로 다시 반환합니다. (GUI가 서버에 표시되지만 모든 사용자에게이 사실을 알릴 것으로 기대하지는 않습니다.)

IIS Express를 사용하여 디버그 모드 (Visual Studio 2017)에서 실행하면 코드가 예상대로 작동합니다. 웹 서비스, WinForms 응용 프로그램 시작 (화면에서 볼 수 있음) 및 적절한 호출을 수행합니다. 그런 다음 자동으로 닫히고 예상 된 출력 파일이 예상 된 위치에 있습니다. 기본적으로 모든 것이 정확하게 설계된대로 실행됩니다.

그러나 동일한 서버이지만 IIS Express (IIS Express가 아닌)에서 호스트하면 더 이상 작동하지 않습니다. 웹 서비스를 호출하면 작업 관리자에서 WinForms 앱이 시작되는 것을 볼 수 있습니다. 그러나 UI 자체가 나타나지 않으면 즉시 멈 춥니 다. 이 후 WinForms 응용 프로그램과 연결된 메모리가 정상적으로 작동 할 때보 다 훨씬 낮은 레벨에서 동일하게 유지되고 결국 API 호출이 시간 초과됩니다.

IIS의 AppPool을 내 Admin 계정을 사용하도록 변경했으며 WinForms 응용 프로그램과 연결된 모든 폴더에 동일한 Admin 계정에 대해 "모든 권한"권한이 있습니다. WinForms 앱이 시작되면이 계정은 동일한 Admin 계정 (IIS Express가 사용하는 것과 동일 함)과도 연결됩니다.

IIS와 같이 GUI를 사용하여 응용 프로그램을 시작할 수있는 권한이 없어도 IIS Express가 수행 할 수 있습니까?

비슷한 문제가 있으므로 SO를 검색했지만 웹 서비스의 루트 디렉터리에없는 파일에 액세스 할 때 발생할 수있는 일반적인 폴더 액세스 권한과 관련하여이 문제에 도움이되는 것은 없습니다.

웹 서비스가 Windows Server 2016 Datacenter에서 호스팅되고 있습니다.

나는 약간의 진전을했습니다

편집 - 나는 진정한 사용자 프로필 = (https://i.stack.imgur.com/2pIyr.png를)로드하는 응용 프로그램 풀 설정을 변경 IIS7 does not start my Exe file by Process Start but it's running in task bar에 대한 답변 중 하나에 따라. 지금 시도하면 작업 관리자에서 WinForms 앱을 볼 수 있으며 예상했던 것과 비슷한 메모리가 변경되어 앱이 종료 된 것처럼 보입니다. GUI가 나타나지 않고 예상되는 출력 파일이 생성되지 않고 웹 서비스 process.WaitForExit()가 exit 이벤트를 수신하지 못하는 것 같습니다 (프로세스 인스턴스가 WinForms 앱이 종료 될 때 손실되기 때문에 오류가 발생 함) .

편집

솔루션 생산을위한 모범 사례를 반영 할 필요가 있도록이 데모에 대한 것을 그냥 설명.

+0

"서비스가 데스크톱과 상호 작용하도록 허용"하도록 "World Wide Web 게시 서비스"를 구성 했습니까? (내 Win10pro 컴퓨터에서는 "로그온"탭에 있지만 "로컬 시스템"계정을 선택한 경우에만 사용할 수 있음 – theGleep

+0

제안 해 주셔서 감사합니다. 시도하지 않았습니다. 설정을 변경하고 재부팅을 수행했습니다. . 비슷한 차이가없는 것 같습니다. 비슷한 사용 권한이 필요한 다른 서비스가 있는지 궁금합니다. – ProfNimrod

+0

"세션 격리"라는 것이 있습니다. 시스템 세션과 로그온 세션 간의 장벽에 대해 알아보고 이해하십시오. –

답변

0

문제는 IIS와 관련이 있으며 IIS Express와 함께 디버그 모드로 실행하는 것이 정상적으로 작동하고 이는 데모가 아니라 생산과 관련된 것임을 감안할 때 IIS Express에서 호스트하고 VS 2017 용 컨베이어 플러그인 (https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti)을 사용하여 원격 호출 (기본적으로 IIS Express에서는 허용되지 않음)을 허용합니다.

Conveyor를 설치하고 서버 방화벽에서 적절한 포트를 열고 (이 데모 용으로 사용하는 Azure VM의 네트워크 인터페이스에 추가 한) 모든 것이 제대로 작동합니다.

이것은 장기적인 솔루션이 아니며 확실히 생산 솔루션이 아니지만 현재의 목적에 부합합니다. WinForms 응용 프로그램이 실행되는 동안 들어오는 요청을 쉽게 거부 할 수 있습니다.