Shell Windows

Bom dia rapaziada.

Estou com um problema sério.

Quando rodo o windows no modo “Shell” (sem interface gráfica), o Windows não obecedece a localização de pastas.

Vou explicar melhor:

O meu programa gera um arquivo na pasta onde está o executável.

Exemplo: Meu programa roda no caminho C:\Teste\Programa.jar.
Sempre que eu executo este programa, caso o arquivo não exista, ele gera nesta pasta (C:\Teste).
Rodando normalmente (sem shell), funciona perfeitamente (tanto é que está desta forma a alguns anos já).

Agora rodando em Shell, ele não grava este arquivo no caminho onde o programa é executado (C:\Teste). Ele cria este arquivo na pasta do usuário conectado no shell (C:\Documents and Settings\Convidado…).

Desta forma, sempre que eu executar o programa em shell (C:\Teste\Programa.jar) ele irá gerar este arquivo, ou seja, está errado conforme a lógica do meu sistema.

Alguém teria uma posição sobre isto, ou melhor, uma solução para isto?

Agradeço desde já!

Abraços!

Não execute seu programa pelo shell.
Em vez disso, crie um shortcut para uma batch que execute seu programa, para que você possa indicar qual é o diretório corrente dele.
A vantagem de usar um shortcut é que você também pode atribuir um ícone bonitinho, em vez de ficar com aquela xícara de café que não quer dizer nada.
Por exemplo, uma batch poderia ser assim:

@echo off
cd c:\aplicativos
javaw -jar SeuAplicativo.jar

Se quiser evitar que seu programa seja executado pelo shell, você pode até incluir um teste no seu programa para ver se alguma variável ou argumento está definido. Se não estiver, provavelmente seu programa está sendo executado pelo shell e você põe uma instrução no seu programa para dizer “Por favor, use a batch para rodar este programa” ou coisa parecida.

@echo off
cd c:\aplicativos
javaw -Drodando.via.batch=true -jar SeuAplicativo.jar
// No comecinho do seu programa Java:
if (!"true".equals (System.getProperty ("rodando.via.batch")) {
    JOptionMessage.showMessageDialog (null, "Amigo, use a batch para rodar este programa. Fui!");
    System.exit (1);
}