2010-12-01 23 views
0

각 DLL의 버전을 지정하는 ftp 사이트의 매니페스트 파일에 따라 ftp 사이트에서 새 dll을 가져 와서 응용 프로그램을 업데이트하는 코드를 작성 중입니다. 기본 개념은 시작시 업데이트 프로그램이 실행되어 ftp 사이트의 매니페스트를 확인하고 현재 응용 프로그램에서 사용하는 dll보다 최신 인 dll을 다운로드 한 다음 응용 프로그램을 시작하고 스스로 종료하는 것입니다.ftp 사이트에 대한 로컬/원격 액세스 동기화

이렇게하면 다음과 같은 문제가 발생합니다.이를 처리하는 가장 좋은 방법은 확실하지 않습니다. ftp 사이트에 새 dll을 넣고 싶지만 동시에 updater 응용 프로그램 인스턴스가이를 읽으려고합니다. dll. dll을 삭제 한 다음 새 파일을 복사하면 매니페스트에 파일이 있어야한다고하더라도 업데이터에서 파일을 볼 수 없습니다.

저는 동기화 객체 역할을하는 일종의 마커 파일에 대한 아이디어를 가지고 있으며, 그것의 존재와 업데이터 인스턴스가 잠금 장치로 사용할 수 있지만 그저 문제를 움직이는 것이 아닙니까? 잠금이 있는지 확인한 후 다른 사람이 잠금을 설정할 수있는 잠금을 설정하고 ftp 파일을 수정하는 사이에 여전히 시간이 있습니다. 또한 마커를 삭제하기 전에 일부 업데이터가 충돌하면 남은 마커를 삭제해야하는지 여부를 알릴 방법이 없습니다.

편집 : 파일을 다른 폴더에 업로드 한 다음 폴더 이름을 바꾼다는 제안을 보았습니다. 이름 바꾸기는 ftp의 기본 작업이기 때문에 이루어졌지만 이름을 바꿀 수는 있습니다. 기존 폴더? 기존 폴더를 먼저 삭제하면 안되므로 동일한 문제가 발생합니까?

해결 방법이 있습니까?

답변

1

방법 : FTP 서버에서 파일 이름에 버전 정보를 포함하십시오. 클라이언트에서 다운로드 한 후 파일의 이름을 바꿉니다.

+0

감사합니다. 나는 그것이 효과가있을 것이라고 생각한다. 매니페스트는 사용할 dll 버전을 지정하므로 동시에 두 dll 버전을 갖는 데 아무런 해가 없습니다. 새 DLL이 업로드되면 새 매니페스트를 사이트에 복사합니다. 버전 간 겹치는 부분에서 클라이언트는 알아 내야 만합니다. 이는 최신 매니페스트 버전이지만 당연히 수행 할 수 있습니다. 나는 조금 더 간단한 것을 준비 중이다. 그러나 다른 대답이 오지 않는다면 나는 이것을 받아 들일 것이다. – Boris

+0

매니페스트를 업데이트 할 때 동일한 문제가 발생한다는 사실이 나에게도 발생했습니다. 아마도 매우 작아서 위험이 더 적을 수 있습니다. 어쩌면 이전 매니페스트를 삭제하고 새 DLL을 업데이트 한 다음 새 매니페스트를 업로드 할 수 있습니다. 현재 이전 DLL을 다운로드하는 클라이언트는 모두 OK를 계속 수행하며 새 클라이언트가 매니페스트를 찾지 못하면 기다리고 10 초 후에 다시 시도 할 수 있습니다. 그리고 매니페스트를 다운로드 한 후 클라이언트는 파일 끝 마커를 확인하여 완료되었는지 확인할 수 있습니다. –

+0

나는 그것에 대해 생각해 보았다. 나는 그 매니페스트를 업데이트해야한다고 생각하지 않는다. 대신 매니페스트 이름의 버전을 지정해야합니다. 그런 다음 클라이언트는 최신 매니페스트를 찾아서 다운로드하고 함께 다운로드 할 수 있습니다. 잠시 후, 한 시간 또는 하루 정도 지나면 이전 매니페스트를 다운로드 한 모든 클라이언트가 이전 dll을 다운로드했을 것입니다. 현재 다운로드는 새 버전에만 적용되므로 이전 버전을 삭제할 수 있습니다. 새 매니페스트가 완전히 업로드되었는지 확인하기 위해 다른 매니페스트를 만들고 다른 이름으로 이름을 바꿀 수 있습니다. – Boris

관련 문제