none
Erro ao utilizar a propriedade StartupPath RRS feed

  • Pergunta

  • Caros amigos,

    Estou criando esta thread porque o meu problema com a propriedade StartupPath, não está ligada exatamente a uma conexão com uma base dados, e sim com o caminho de um arquivo que está gravado na minha máquina, e eu quero abri-lo, após terem sido modificadas as varíaveis no mesmo, através de uma aplicaçãozinha desenvolvida em C# usando WPF. No momento em que realizo a chamada a propriedade StartupPath, que eu digito Application., o Visual Studio não me dá esta possibilidade, se eu digito mesmo assim, ao compilar ele dá um erro com uma mensagem dizendo que o namespace System.Windows.Application não contém uma definição para StartupPath. Como sugestão de um amigo, que também estuda C#, eu resolvi fazer um teste...adicionei uma referência a biblioteca Windows.Forms...mas não resolveu o meu problema e apareceu um outro erro dizendo que existe uma ambiguidade na referencia ao método Message.Box que estou usando dentro do catch do bloco Try...catch

    Qual seria o caminho certo para resolver este problema?

    Um grande abraço


    Diogo Vicente
    segunda-feira, 8 de junho de 2009 05:03

Respostas

  • Olá Diogo,

    A forma mais simples, é consultar a propriedade BaseDirectory do AppDomain.CurrentDomain:

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = AppDomain.CurrentDomain.BaseDirectory;

    Uma outra forma, seria utilizar Reflection para obter uma referência para o assembly que iniciou a aplicação, e consultar a propriedade Location, que contém o caminho completo para o assembly, incluindo o nome do arquivo... Nesse caso, utilizaria também o método GetDirectoryName da classe Path, que está no namespace System.IO.

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
    Nota: A classe Assembly está no namespace System.Reflection.



    Por fim, uma terceira forma, seria obter uma referência para o processo atual através do método GetCurrentProcess da classe Process, e consultar o nome do executável através da propriedade FileName do MainModule:

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
    Nota: A classe Process está no namespace System.Diagnostics.

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    domingo, 9 de agosto de 2009 09:49
    Moderador

Todas as Respostas

  • public static string StartupPath { get; }
        Member of System.Windows.Forms.Application

    Summary:
    Gets the path for the executable file that started the application, not including the executable name.

    Return Values:
    The path for the executable file that started the application.This path will be different depending on whether the Windows Forms application is deployed using ClickOnce. ClickOnce applications are stored in a per-user application cache in the C:\Documents and Settings\username directory. For more information, see Accessing Local and Remote Data in ClickOnce Applications.


    Achei isso....

    E quando da ambiguidade pressione alt+shift+F10 que vai aparecer os namespace disponiveis para uso....
    ou digite o nome completo por exemplo(System.Windows.Controls.MessageBox), ou de um apelido para o namespace por exempo( using Control = System.Windows.Controls que ai quando for usar uma messabox , vc digita Controls.MessageBox que você podera usava)...

    Espero ter ajudado....


    kaneda182
    sexta-feira, 19 de junho de 2009 17:40
  • Olha Kaneda, eu encontrei num outro fórum ae, uma resposta que eu axava que pudesse resolver meu problema, mas eu tentei e não esta funcionando.

    A pessoa qm postou coloca de duas formas:

    AppDomain.CurrentDomain.BaseDirectory;
    or
    String appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

    fonte: http://dotnetslackers.com/Community/forums/application.startuppath-in-wpf/p/3133/31159.aspx


    Diogo Vicente
    sexta-feira, 19 de junho de 2009 19:19
  • Olá Diogo,

    A forma mais simples, é consultar a propriedade BaseDirectory do AppDomain.CurrentDomain:

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = AppDomain.CurrentDomain.BaseDirectory;

    Uma outra forma, seria utilizar Reflection para obter uma referência para o assembly que iniciou a aplicação, e consultar a propriedade Location, que contém o caminho completo para o assembly, incluindo o nome do arquivo... Nesse caso, utilizaria também o método GetDirectoryName da classe Path, que está no namespace System.IO.

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
    Nota: A classe Assembly está no namespace System.Reflection.



    Por fim, uma terceira forma, seria obter uma referência para o processo atual através do método GetCurrentProcess da classe Process, e consultar o nome do executável através da propriedade FileName do MainModule:

    // Obtém a pasta onde está o executável da aplicação
    string startupPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
    Nota: A classe Process está no namespace System.Diagnostics.

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    domingo, 9 de agosto de 2009 09:49
    Moderador