Evitar lock de arquivo .jar (local/rede)

Enquanto o programa Java (Desktop) esta sendo executado, os arquivos .jar do sistemas ficam com lock. É preciso fechar o sistema para apagar/atualizar estes arquivos.
Tem algum maneira de evitar este lock, nem que seja para informar que ele deve manter o jar antigo em memória ?

Isso é um problema sério do Windows.

No Unix e no Linux, devido ao conceito de inodes, posso simplesmente apagar um arquivo em uso e criar um outro com o mesmo nome sem problemas (o arquivo em uso, embora não tenha mais uma entrada no diretório, continuará vivo até que ninguém mais o esteja usando).

No Windows, devido a esses problemas, existe o conceito de “reinicializar a máquina e marcar um arquivo para ser substituído no reboot”. É muito tosco, na verdade. Outra maneira é disparar um programa auxiliar (normalmente em C++) que fique vigiando o programa em Java sair, e então tenta substituir os arquivos. Se mesmo assim não conseguir, esse programa deve marcar o arquivo (usando uma API chamada MoveFileEx) para que a substituição seja feita no reboot.

Obrigado entanglement (te mandei mensagem em MP tempos atrás e não tive resposta… pois acho que já trabalhei com você, pelo jeito que você fala as coisas…)

Realmente o problema é só no windows e é critico com arquivos compartilhados na rede.
Já usei algumas coisas como o MoveFileEX…

Pensei numa gambiarra, de ao abrir o programa Java, ele gerar uma cópia dos arquivos da rede, mas para isso teria de deixar de usar o launch4J e escrever alguma coisa em C para iniciar o programa Java.
Pensei também em usar um vbs para iniciar o programa java que fizesse essa atualização em cada maquina antes do inicio e na sequência abrisse o launch4J…

mas queria evitar essas gambiarras…

Bom, o que não é o MoveFileEx senão uma gigantesca gambiarra? Se a Microsoft deu o exemplo…