2012-06-09 4 views
3

Linux 및 Windows 용 그래픽 GNU 프론트 엔드를 작성하고 있습니다. (MSEgit)을 기반으로 MSEide+MSEgui입니다. MSEgit은 git와 파이프로 통신하는 내부 콘솔 창을 가지고 있습니다. 리눅스에서는 PTY를 사용하므로 SSH는 PTY에서 키 잠금 해제 암호를 묻습니다.
Windows에서 작은 암호 입력 응용 프로그램을 작성하고 이에 따라 SSH_ASKPASS 환경 변수를 설정했습니다.
SSH는 CreateProcess() dwCreationFlags DETACHED_PROCESS가 설정된 상태에서 git이 시작되었지만 비밀번호 입력 창이 선택되지 않으면 해당 작업 표시 줄 아이콘이 대신 깜박입니다.
SSH는 FreeConsole()이 호출되어 MSEgit에 연결된 콘솔이없고, git가 DETACHED_PROCESS없이 시작되지만 CREATE_NO_WINDOW가 아닌지 확인하는 경우 암호 응용 프로그램을 실행하지 않습니다.
POSIX setsid()를 호출해야한다고 가정합니다.
어떻게 SSH가 DETACHED_PROCESS 플래그없이 SSH_ASKPASS를 사용하도록 강제 할 수 있습니까?
이것이 가능하지 않은 경우 비밀번호 입력 창이 집중되도록하려면 어떻게해야합니까?창문에 SSH_ASKPASS가 있습니다.

+0

Git for Windows 2.x를 사용할 때 더 이상 필요하지 않은 것 같습니다. – npostavs

답변

0

자식 프로세스가 권한을 얻지 못하면 부모 프로세스에서 포커스를 벗어날 수 없습니다. 부모는 해당 허가를 제공하기 위해 AllowSetForegroundWindow으로 전화해야합니다. 그런 다음 하위 프로세스는 전경이되어 적절하게 포커스를 설정할 수 있습니다.

+0

암호 창에 집중하기 위해 작동합니다. 감사합니다. AFAIK 하위 프로세스는 포 그라운드 프로세스 인 MSDN에서 만든 경우 포커스를 가져야합니다. "다음 조건 중 하나에 해당하는 경우에만 프로세스가 전경 창을 설정할 수 있습니다. 프로세스가 포 그라운드 프로세스 임 프로세스가 포어 그라운드에서 시작되었습니다. 과정. [...] ". DETACHED_PROCESS는 (는) 해당 규칙을 금지합니다. –

관련 문제