문제

내가 항상 궁금해 한 것은 소프트웨어 패치가 어떻게 작동하는지입니다. 많은 소프트웨어는 이전 버전을 통해 설치 해야하는 바이너리에 새로운 버전을 출시하는 것 같습니다. 그러나 일부 소프트웨어 (특히 Windows와 같은 운영 체제)는 버그를 수정하거나 기존에 기능을 추가하는 매우 작은 패치를 출시 할 수있는 것으로 보입니다. 소프트웨어.

대부분의 경우 내가 보는 패치는 전체 응용 프로그램 또는 응용 프로그램 내에서 사용되는 작은 파일을 대체 할 수 없습니다. 나에게 그것은 실제 바이너리가 수정되는 것처럼 보인다.

이러한 종류의 패치는 실제로 어떻게 구현됩니까? 누구든지 이것이 어떻게 작동하는지 설명하는 리소스를 지적 할 수 있습니까?

아마도 이런 식으로 배포를 할 필요가 없지만 그것이 어떻게 작동하는지 궁금합니다. 패치가 바이너리 파일의 일부만 수정할 수 있다는 것을 이해하는 것이 옳다면 .NET에서 가능합니까? 그것이 내가 가장 친숙한 프레임 워크이기 때문에 그것을 배우고 싶다면 그것이 어떻게 작동하는지 이해하고 싶습니다.

도움이 되었습니까?

해결책

이는 일반적으로 이진 Diff 알고리즘을 사용하여 구현됩니다. 가장 최근에 릴리스 된 버전은 새 코드에 대해 Diff입니다. 사용자가 최신 버전을 실행하는 경우 Diff 만 적용하면됩니다. 컴파일 된 코드는 일반적으로 버전간에 매우 유사하기 때문에 소프트웨어에 특히 잘 작동합니다. 물론 사용자가 가장 최근 버전을 실행하지 않으면 어쨌든 모든 것을 다운로드해야합니다.


제네릭 바이너리 차이 알고리즘의 몇 가지 구현이 있습니다. BSDIFF 그리고 xdelta 좋은 오픈 소스 구현입니다. .NET에 대한 구현은 찾을 수 없지만 문제의 알고리즘은 플랫폼 비상장이므로 프로젝트처럼 느껴지면 포트가 너무 어렵지 않아야합니다.

다른 팁

Windows 응용 프로그램 패치에 대해 이야기하고 있다면보고 싶은 것은 .msp 파일입니다. 이들은 .msi와 유사하지만 패치 및 응용 프로그램 만 있습니다.

보세요 패치 및 업그레이드 MSDN 문서에서.

.MSP 파일이하는 일은 업데이트 된 파일을 애플리케이션 설치로로드하는 것입니다. 이것은 일반적으로 DLL 및 리소스 파일을 업데이트하지만 모든 파일을 포함 할 수 있습니다.

설치된 응용 프로그램을 패치하는 것 외에도 C : Windows Installer에있는 수리 파일도 업데이트됩니다. 그런 다음 사용자가 프로그램 추가 / 제거에서 "수리"를 선택하면 업데이트 된 패치 파일도 사용됩니다.

John Millikin이 논의한 이진 DIFF 방법은 다른 운영 체제에서 사용되어야한다고 생각합니다. 창에서 작동하게 할 수는 있지만 다소 외계인 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top