No meu trabalho recente, quero criar uma pequena ferramenta para lembretes aos clientes; Naturalmente, o programa winform deve ler o arquivo de configuração do mesmo diretório do aplicativo (não o arquivo exe.config);
Para ler o diretório onde a aplicação atual está localizada, imediatamente pensei em System.Environment.CurrentDirectory para obter o diretório funcional atual. O programa parece rodar perfeitamente;
Quando cheguei ao trabalho na manhã seguinte, apareceu: "Ler arquivo de configuração faltando". O app adiciona início automático de inicialização. Essa mensagem aparece para ler a falha do arquivo de configuração e verificar imediatamente se o arquivo de configuração no diretório do aplicativo foi deletado sozinho. Depois de verificar, descobri que o arquivo ainda estava lá, saí do programa e rodei novamente
Ainda está bem, nenhum perfil de leitura pop-up faltando. Então veja se o caminho da entrada de boot no registro não está no meu diretório? Olhando o arquivo de caminho, está tudo bem. Um pouco confuso? Sai do computador e tentei reiniciar, mas ainda aparece o arquivo de configuração faltando. A razão para não conseguir encontrar o caminho será tomada diretamente
MessageBox, o programa executa e descobre que o caminho é realmente esse caminho.
Adicione o código MessageBox e continue iniciando o teste. Quando liguei, percebi que o diretório atual que apareceu era C:\Windows\System32, e fiquei confuso na hora. Pensei comigo mesmo, será que o programa do Lao Tzu chegou até o system32? Checando o registro e o sysetm32 não têm meu app. Por fim, achei que deveria haver um problema com o código para obter o caminho.
Após testes repetidos, foi constatado que System.Environment.CurrentDirectory realmente é para obter o diretório atual, mas se o programa A chamar o programa B e o programa B usa System.Environment.CurrentDirectory para obter o diretório. Então, o diretório obtido no programa B não é mais o diretório onde a aplicação B está localizada; Ele se torna o diretório onde A está localizado. Não é difícil encontrar que o diretório que aparece quando eu inicializo é C:\Windows\System32, porque o programa de autoinicialização também é chamado por um processo no Windows.
Portanto, se o programa winform quiser obter o diretório onde a aplicação atual está localizada, é melhor não usar System.Environment.CurrentDirectory. Em vez disso, é: Application.StartupPath Dessa forma, não importa quem chame.
Código de teste:
Transferido de:O login do hiperlink está visível.
|