2010-08-22 2 views
1

Qt 애플리케이션을 설치하는 NSIS 설치 프로그램이 있습니다. 설치 프로세스가 끝나면 설치 프로그램은 사용자에게 응용 프로그램을 즉시 시작할 수있는 옵션을 제공합니다.하나의 프로세스가 NSIS 설치 프로그램에 의해 호출되었을 때 QLocalSocket/Server 연결이 작동하지 않는 이유는 무엇입니까?

내 응용 프로그램은 QLocalSocket/QLocalServer를 사용하여 응용 프로그램의 다른 로컬 인스턴스와 통신합니다. (기본적으로 한 번에 하나의 인스턴스 만 실행되도록 서로 이야기합니다.) 그러나 Vista에서는 인스턴스 중 하나가 설치 프로그램에 의해 시작된 경우 다른 인스턴스는 해당 인스턴스와 대화 할 수 없습니다 그들은 또한 설치 프로그램 (또는 제거 프로그램, 흥미롭게도)에 의해 시작되었습니다.

NSIS 설치 관리자는 Exec 명령으로 앱을 실행합니다. 클라이언트가 "QLocalSocket :: connectToServer : Unknown error 5"오류로 실패한 QLocalSocket :: connectToServer를 통해 서버에 연결하려고합니다.

누구든지 설명 할 수 있습니까? 그 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

1

5가 Windows 오류 코드 인 경우 액세스가 거부되었음을 의미합니다. 이 서버의 보안을 변경하는 방법이 있습니까 (네이티브 파이프 핸들에 액세스해야합니까)?

마무리 페이지의 실행 옵션은 단지 이것보다 더 문제가, 새로운 프로세스가 잘못된 HKCU 및 사용자 프로필 등 난 그냥 마무리 페이지의 실행 체크 박스를 해제 추천 할 것입니다

을 가져옵니다. (이 문제는 RunAs가 추가되었을 때 win2000으로 되돌아갑니다)

이 실행 체크 박스를 실제로 사용하려면 UAC plugin을 사용할 수 있습니다. 그러면 하위 프로세스를 "올바른"사용자로 시작할 수 있습니다.

1

마지막으로 알아 냈습니다. 설치 관리자가 admin (설치 스크립트가 "RequestExecutionLevel admin"이라고 말한) 관리자로 실행 중이며 권한 상승으로 내 앱을 시작한 것으로 나타났습니다. 즉, 사용자 수준 권한으로 실행중인 다른 앱 인스턴스에 연결할 수 없었습니다. QLocalSocket/Server는 Windows에서 명명 된 파이프를 사용하므로 Windows 보안 기능이라고 생각합니다. UAC NSIS 플러그인을 사용하여이 문제를 해결할 계획입니다.이 플러그인을 사용하면 사용자 수준 권한으로 프로세스를 실행할 수 있습니다.

+0

당신이 알아 낸 것을 기쁘게 생각합니다. 후송 해 주셔서 감사합니다. –