a) Se estiver usando o JDK 5.0 ou superior, e o Windows 2000 ou superior, é possível obter via System.getenv (“ProgramFiles”)
b) Se estiver usando o JDK 1.4 ou inferior, mas o Windows 2000 ou superior, você precisa usar um script que passe esse valor via parâmetro -D para seu programa Java
por exemplo, java “-DProgramFiles=%PROGRAMFILES%” -cp . SuaClasse
ou java “-DProgramFiles=%PROGRAMFILES%” -jar SeuJar.jar
e no programa, pegue o valor com System.getProperty (“ProgramFiles”)
c) Se for o Windows NT já não sei, mas no 95/98/ME esse truque de pegar a variável de ambiente não funciona, se não me engano.
DICA - em um sistema que escrevi tive de posicionar os arquivos relativamente ao diretório de instalação. Usei um instalador normal (Installshield, não recomendo a versão muito velha que usei - 6.12 - mas é porque existia uma cópia oficial dessa versão aqui na firma. Aí o instalador criou um shortcut para o programa, que passava o diretório de instalação como um parâmetro -D para o Java. Aí era só pegar o valor (com System.getProperty) nos pontos do programa que requeriam o valor do diretório.