Вы можете просто использовать каталог изменений для вашего конкретного каталога.
cd C:\Users\myusername\OneDrive\Documents\
javac HelloWorld.java
Просто некоторые мысли у меня были.
1 кажется проблематичным, потому что вы в конечном итоге сталкиваетесь с ситуацией, которую пытаетесь разрешить, потому что в какой-то момент средство обновления будет нуждаться в обновлении. 3 звучит хорошо, но если под «заменой» вы подразумеваете использование какого-то необычного отражения для загрузки библиотеки DLL во время выполнения, я не уверен, что производительность станет проблемой.
Существует четвертый вариант, когда служба может порождать процесс обновления, который позволит ему обновлять исполняемый файл обновления, если это необходимо, перед его запуском. Оттуда просто написать приложение для установки, которое появится в сервисе перед закрытием.