A forma como eu uso (e prefiro) é ter um AppServer e ambiente específico para desenvolvimento e compilação. No momento de uma atualização de rpo em produção, eu copio o rpo de produção para o ambiente de desenvolvimento, compilo/aplico todas as atualizações, depois paro o serviço de produção e troco o rpo de produção com o de desenvolvimento.
Nem toda empresa pode se dar ao luxo de parar o sistema em período produtivo, então alguns desenvolvedores que conheço preferem realizar uma atualização a quente, que seria trocar o rpo de produção por outro diretamente no appserver.ini de produção e sem parar o sistema.
Para isso, basta preparar outro rpo baseado no de produção e disponibilizar em outra pasta, após isso, alterar as chaves SourcePath e RpoCustom do ini. Exemplo:
Estava assim:
SourcePath=C:\Totvs\Protheus\apo
RpoCustom=C:\Totvs\Protheus\apo\custom.rpo
Altero apontando para o novo rpo:
SourcePath=C:\Totvs\Protheus\apo\quente
RpoCustom=C:\Totvs\Protheus\apo\quente\custom.rpo
Ao fazer essa troca, o sistema irá identificar a mudança do repositório e irá reiniciar o smartclient dos usuários.
Caso você estiver tendo problemas de acesso exclusivo em ambientes de teste ou desenvolvimento, você pode configurar a chave BuildKillUsers no ambiente em questão.
Uma vez ativada, essa chave sempre irá derrubar TODAS as conexões quando for dado o comando de compilação, permitindo que seja compilado fontes sem exibir a mensagem de acesso exclusivo.
Muito cuidado ao configurar essa chave em ambientes de produção, uma vez que poderia ocasionar a derrubada de todos os usuários.
Para maiores informações: https://centraldeatendimento.totvs.com/hc/pt-br/articles/360018481631-Cross-Segmento-TOTVS-Backoffice-Linha-Protheus-ADVPL-Encerrar-todas-as-conex%C3%B5es-quando-solicitado-uma-compila%C3%A7%C3%A3o