2010-12-06 6 views
0

C++ (Visual Studio 2010)로 Windows 서비스를 작성하고 있으며이 서비스는 보안 사본을 통해 원격 서버에 파일을 보내야합니다. 그것을 위해 pscp.exe 사용).Windows 서비스에서 외부 프로그램 (pscp)을 실행해도 작동하지 않습니다.

따라서 system 함수를 사용하여 pscp.exe를 시작하고 일반 응용 프로그램으로 실행하면 정상적으로 작동합니다.

하지만 서비스로 실행하려고하면 서비스가 pscp.exe (작업 관리자에서 볼 수 있음)를 실행하지만 pscp.exe가 멈추고 원격 호스트에 아무 것도 보내지 않습니다. 그리고 서비스를 중단하더라도 직접 pscp 프로세스를 종료해야합니다.

"포럼과 상호 작용하는"서비스를 허용하는 포럼을 읽었지만 문제가 해결되지 않았습니다.

또한 서비스가 로그온 한 사용자 계정을 아무런 결과없이 변경하려고 시도했습니다.

아이디어가 있으십니까?

이 외부 프로그램에 pscp.exe와 같은 GUI가 없더라도 Windows 서비스에서 외부 프로그램을 실행하는 것은 매우 어렵습니다.

감사합니다.

- 아우 Caringi에게

+0

어떤 계정을 사용하고 계십니까? 대부분의 서비스는 "** 로컬 ** 시스템"으로 실행됩니다. 분명히 원격 호스트에 연결해야한다면 pscp에 충분하지 않습니다. – MSalters

답변

0

pscp 호출에 대한 옵션은 무엇입니까? '자동'옵션이 있으면 콘솔 상호 작용을 피하기 위해이 옵션을 사용하십시오. 종종 -q 또는 /q입니다.

실행 된 앱은 서비스와 동일한 사용자 계정으로 실행됩니다. 계정에 요청하는 권한을 가지고 있습니까? 문맥 (실행 디렉토리, 경로)이 올바른지 pscp에 맞습니까?

+0

저는 이미 pscp (-q)에 'silent'옵션을 사용하고 있습니다. –

+0

서비스는 문제없이 지정된 디렉토리에 파일을 쓸 수 있습니다. 그리고 pscp 프로그램이 동일한 사용자 계정으로 실행되면 파일도 읽을 수 있다고 생각합니다. –

0

가장을 사용하려고 할 수 있습니다. 이게 뭔가 ...

이 코드는 서비스에서 GUI 응용 프로그램을 호출하는 데 사용되지만, 콘솔 응용 프로그램에는 많은 변경이 필요하지 않습니다.

0

시스템이 아닌 CreateProcess 기능을 사용하여 pscp 응용 프로그램을 실행해야합니다. 후자는 명령을 서비스에서 액세스 할 수없는 명령 인터프리터 (cmd.exe)로 릴레이합니다.

+0

시스템 대신 _popen 함수를 사용하여 몇 가지 테스트를하고 있는데, pscp의 출력을 캡처하고 있습니다.원격 호스트에 연결하려고 할 때만 프로그램이 멈추는 것을 알았습니다. 예를 들어 pscp -v (버전 만 표시하고 종료)를 실행하면 Ok가 실행됩니다. –

+0

문제는 네트워크 권한입니다. – jalf

+0

jalf, 나는 이것을 생각했다. 하지만 curl.exe (libcurl에서)로 pscp.exe를 바꿨고이 문제가 해결되었습니다. –

0

문제가 해결되었습니다.

서비스에서 pscp.exe가 실행되지 않습니다. 나는 이유를 모른다.

그러나 curl.exe (libcurl에서 제공)는 보안 사본을 지원합니다!

감사합니다.

관련 문제