Eu tenho dois arquivos exe na mesma pasta, posso executar exe2 a partir de um botão no exe1. Hoje eu estava observando um cliente em uma sessão remota (serviços de terminal) e exe2 falhou ao executar o erro 'Arquivo não encontrado', mas exe1 estava no mesmo diretório quando verificamos. Portanto, devo usar AppDomain.CurrentDomain.BaseDirectory ou System.Environment.CurrentDirectory ?
obrigado
string.GetFullPath(path)
usa emEnvironment.CurrentDirectory
vez deCurrentDomain.BaseDirectory
, para minha surpresa.Respostas:
Se você deseja localizar arquivos no mesmo diretório de seu aplicativo,
AppDomain.CurrentDomain.BaseDirectory
é a escolha correta.Environment.CurrentDirectory
é um valor que pode e irá mudar durante a execução de seu aplicativo. Por exemplo, usando parâmetros padrão, o OpenFileDialog em WinForms irá alterar este valor para o diretório de onde o arquivo foi selecionado.fonte
AppDomain.CurrentDomain.BaseDirectory
retorna o diretório de onde o domínio do aplicativo atual foi carregado.System.Environment.CurrentDirectory
retorna o diretório do sistema atual.No seu caso
AppDomain.CurrentDomain.BaseDirectory
é a melhor solução.fonte
Você deve usar
AppDomain.CurrentDomain.BaseDirectory
.Por exemplo, em um aplicativo de serviços do Windows:
System.Environment.CurrentDirectory
retornará C: \ Windows \ system32Enquanto
AppDomain.CurrentDomain.BaseDirectory
retornará [localização do Application.exe]Outro fator importante a ser observado é que
AppDomain.CurrentDomain.BaseDirectory
é uma propriedade somente leitura, enquantoEnvironment.CurrentDirectory
pode ser outra coisa, se necessário:// Change the directory to AppDomain.CurrentDomain.BaseDirectory Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
fonte
Pelo que entendi, você deve usar
BaseDirectory
.CurrentDirectory
pode mudar ao longo da execução do programa.fonte
Em projetos de teste do Visual studio 2010, se você habilitar a opção de implantação de Editar configurações de teste, AppDomain.CurrentDomain.BaseDirectory aponta para a pasta TestResults \ Out (não bin \ debug). Embora a configuração padrão aponte para a pasta bin \ debug.
Aqui encontrei uma resposta convincente.
Por que AppDomain.CurrentDomain.BaseDirectory não contém "bin" no aplicativo asp.net?
fonte
Eu geralmente uso algo como:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); AppPath = AppPath.Replace("file:\\", "");
fonte
Eu também passei por isso alguns dias atrás, como estava usando
pois estava me dando problemas no servidor de produção, mas estava funcionando bem com meu servidor local,
Então, eu tentei com
E funcionou para mim tanto no Meio Ambiente.
Então, como todos eles disseram, devemos sempre ir com
enquanto verifica o diretório do Domínio Atual para o caminho.
dê uma olhada para mais informações
Não foi possível encontrar uma parte do erro de caminho no servidor
fonte