Uma vez eu implementei isso para MMOs. Um fim de semana, enquanto tentava instalar o WOW para minha filha, levou 48 horas decorridas (patches, erros de download etc.), então decidi criar minha própria solução melhor.
O jogo geralmente precisa de 10 GB de dados antes de rodar. Na verdade, nem todos os arquivos são necessários imediatamente, mas os jogos costumavam esperar até que todos os arquivos estivessem presentes localmente. Minha solução foi executar o jogo localmente normalmente, mas o EXE foi enganado (usando um minifiltro de arquivo do Windows) para pensar que todos os arquivos já estavam presentes. Quando um arquivo solicitado não era local, o sistema de arquivos baixou e salvou. O jogo foi lentamente copiado localmente, conforme necessário. Quando havia largura de banda disponível, os outros arquivos ainda não necessários eram introduzidos em segundo plano. Isso funcionou com TODOS os jogos sem a necessidade de recompilar, porque meu driver de minifiltro obteve arquivos quando necessário.
A pior desvantagem foi a latência. Minha solução para isso foi criar um pequeno modelo de cadeia de Markov para prever qual arquivo seria necessário em seguida e priorizar o carregador em segundo plano. Isso funcionou como um encanto, e nosso MMO foi capaz de executar quase IMEDIATAMENTE depois que apenas o EXE e alguns arquivos de tela de carregamento estavam locais (~ 20 MB). Conseguimos clicar em um link em uma página da Web e rodar nosso jogo de mais de 10 GB em cerca de 30 segundos . Tivemos uma taxa de acerto de 99%, ou seja, quando o jogo precisava de um novo arquivo pela primeira vez, ele já estava lá!
Ficaria feliz em ajudar alguém a implementar isso.