2013-08-22 1 views
0

많은 소프트웨어가 함께 설치된 Windows 서비스에 의해 업데이트된다는 것을 알고 있습니다. 나는 클라이언트 응용 프로그램을위한 업데이트 도우미와 데이터 서버 역할을하는 서비스를 만들었습니다. 하지만이 서비스에서 내 클라이언트 응용 프로그램을 제어하는 ​​방법에 대해 고민하고 있습니다.스스로 업데이트 할 수있는 소프트웨어 업데이트 서비스를 만드는 방법은 무엇입니까?

먼저 내 서비스는 원격 서버의 업데이트를 확인한 다음 파일을 다운로드합니다.

사용자에게 지금 또는 다음 실행을 업데이트할지 묻는 뉴스를 클라이언트에 보냅니다.

업데이트 할 때 클라이언트 응용 프로그램은 자신의 실행 파일을 삭제할 수 없으므로 서버가 실행 중이 지 않을 때 서버에 요청한 다음 파일 삭제 및 이름 바꾸기를 완료하면 서버에서 실행 파일을 삭제할 수 있습니다. 클라이언트를 다시 실행합니다.

서비스가 세션 0에 있으면 클라이언트를 동일한 사용자 세션으로 다시 실행할 수 없습니다.

다른 가능한 문제는 바로 서비스가 업데이트가 필요할 때입니다. 클라이언트 대신에 업데이트되어 해결 될 수 있습니다.

따라서 클라이언트와 서버를 업데이트하는 경우 작업을 수행하는 데 세 번째 응용 프로그램을 만들어야합니다. 이 세 번째 응용 프로그램이 콘솔 응용 프로그램 인 경우 서비스에서 실행하는 데 아무런 문제가 없습니다.

이 세 번째 앱이 포함되지 않은 솔루션이있는 경우 가장 좋을 것입니다.


참고 :

서비스는 단지 업데이트 서비스가 아니라 서버가 사용자 액세스 및 권한을 알리기 위해. 주 클라이언트 응용 프로그램은 user information database에 직접 액세스하지 않습니다.

+0

시동시 자체 복사본을 만들어 해당 복사본을 실행하십시오. –

+0

여기서는 시작하지 않겠습니다. 데스크톱 소프트웨어를 업데이트하는 서비스는 확실하게 올바른 솔루션이 아닙니다. –

+0

실제로 나는 너무 빨리 설명에 뛰어 들었습니다. 서비스와 함께 작동 할 수는 없습니다. –

답변

7

서비스가 세션 0에 있으면 클라이언트를 동일한 사용자 세션으로 다시 실행할 수 없습니다.

예, CreateProcessAsUser()을 사용하여 앱을 실행할 사용자 계정과 데스크톱을 지정하면 가능합니다. 클라이언트는 서비스를 종료하기 전에 해당 정보를 서비스에 전달할 수 있습니다.

그러나 어떤 경우에도 exe를 업데이트하려면 먼저 실행을 중지해야합니다. 따라서 서비스를 업데이트 할 때, 특히 서비스가 클라이언트 업데이트를 처리하는 것 이상을 수행하는 경우 설치 프로그램을 사용하여 서비스를 중지하고 EXE를 바꾸고 서비스를 다시 시작하는 것이 더 안전합니다. 그렇다면 설치 프로그램을 사용하여 클라이언트를 업데이트하면 어떻습니까? 다운로드 된 업데이트는 필요에 따라 클라이언트와 서비스를 모두 중지하고 파일을 대체 한 다음 클라이언트 나 서비스에 종료 후 설치 프로그램을 삭제하는 독립형 설치 프로그램 일 수 있습니다. 그렇지 않으면 설치 프로그램이 Windows에서 설치 프로그램을 삭제하도록 Windows에 요청할 수 있습니다. 다음 OS 재부팅.

+0

http://social.msdn.microsoft.com/Forums/windowsdesktop/ko-KR/31bfa13d-982b-4b1a-bff3-2761ade5214f/calling-createprocessasuser-from-service에서 CreateProcessAsUser()에 대한 팁을 찾았습니다. 델파이 용 솔루션을 개발하려고합니다. – PSyLoCKe

관련 문제