.NET - Iniciando sua aplicação junto com o Windows


 No artigo de hoje vou apresentar uma dica que mostra como iniciar sua aplicação C# ou VB .NET junto com o Windows.

Recordando a teoria

O registro do Windows é um base de dados hierárquica que armazena os ajustes de configuração e opções dos sistema operacional Windows.

Assim, o registro do Windows pode ser visto como um banco de dados central que armazena as definições das configurações e outras informações exigida pelas aplicações.

Ele surgiu para unir em um único local todos os arquivos INI, utilizados para armazenar as configurações de cada programa como acontecia no Windows 3.11 e anteriores. Como ficavam espalhados pelos diretórios no disco, eram de difícil administração.

As duas únicas tarefas que você consegue fazer com o registro é ler e escrever nele.

Você já alguma vez abriu o registro ?

Se não o fez , basta clicar com botão direito sobre o ícone do Windows no canto inferior esquerdo da barra de tarefas e na janela Executar digitar regedit e clicar em OK; (Estou usando o Windows 8.1)

O botão OK abre o editor do registro. Na figura abaixo temos a hierarquia do registro. Ela possui cinco chaves principais sob o nó Meu Computador.

Para poder trabalhar como registro a .NET Framework fornece duas classes - Registy e RegistryKey.

Estas classes estão definidas no namespace - Microsoft.Win32; de forma que para que possamos usá-las devemos fazer referência a este namespace.

A classe Registry

Podemos definir as chaves do registro na seguinte ordem:

CurrentUser         - Armazena informação sobre as preferências do usuário.
LocalMachine       - Armazena a configuração da informação para a máquina local
ClassesRoot          - Armazena informação sobre tipos e classes e suas propriedades.
Users                   - Armazena informação sobre a configuração padrão do usuário.
PerformanceData  - Armazena informação de desempenho para os componentes de software.
CurrentConfig       - Armazena informação sobre hardware.
DynData               - Armazena dados dinâmicos.

A classe Registry contém membros que fornecem acesso as chaves do registro. Os membros correspondentes a cada um dos tipos das chaves acima citadas estão descritos abaixo:

ClassesRoot Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_CLASSES_ROOT
CurrentConfig Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_CURRENT_CONFIG
CurrentUser Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_CURRENT_USER
DynData Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_DYN_DATA
LocalMachine Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_LOCAL_MACHINE.
PerformanceData Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_PERFORMANCE_DATA
Users Retorna um tipo RegistryKey o qual fornece acesso a chave HKEY_USERS

A classe RegistryKey

A classe RegistryKey contém membros para incluir , remover , substituir e ler dados do registro. Os métodos e propriedades mais comuns desta classe estão indicados abaixo:

Propriedades Descrição
Name Representa o nome da chave
SubKeyCount Representa o numero de subkeys a nivel da base para a chave atual
ValueCount Representa o numero de valores na chave key.

Métodos

Método

Descrição

Close

Fecha a chave.

CreateSubKey

Cria uma nova subkey se ela não existir, de outro modo abre a subkey existente.

DeleteSubKey

Exclui a subkey definida

DeleteSubKeyTree

Exclui a subkey e qualquer filha.

DeleteValue

Exclui o valor definido de uma Chave. 

GetSubKeyNames

Retorna um vetor de strings que contém todos os nomes das subkeys.

GetValue

Retorna um valor especifico.

GetValueNames

Retorna um vetor de strings que contém todos os valores dos nomes associados com esta chave.

OpenSubKey

Abra uma subkey.

SetValue

Atribui o valor definido.

Depois dessa teoria vamos ao que interessa: Usar o registro do Windows para iniciar sua aplicação junto com o Windows.

Como fazer isso ?

Simples, usar a classe Registry do namespace System.Win32 e adicionar sua aplicação no registro do Windows.

Vamos incluir uma entrada em HKEY_CURRENT_USER que permitirá que o programa seja iniciado pelo usuário que esta atualmente logado no Windows quando o código for executado.

Se você quiser que o programa seja iniciado junto com o Windows para todos os usuários terá que usar a chave HKEY_LOCAL_MACHINE mas para fazer isso você precisa ter direitos de administrador do sistema.

Recursos usados :

Iniciando sua aplicação com o Windows

Abra o VS 2013 Express for windows desktop e clique em New Project;

A seguir selecione a linguagem Visual Basic ou Visual C# e crie uma aplicação de qualquer tipo.

Eu vou criar uma aplicação usando o template Windows Forms Application;

Informe um nome pertinente como Iniciar_App_Com_Windows;

No projeto criado inclua dois botões de comando no formulário do projeto:

O leiaute pode ser algo parecido com a figura abaixo. Se estiver mais inspirado fique à vontade...

Vou criar dois métodos no formulário, mas você pode melhorar criando uma classe com métodos estáticos.

O primeiro será para incluir a aplicação no registro do Windows:

 public void AdicionarAplicacaoAoIniciar()
  {
      try
      {
          using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
          {
                 key.SetValue(caminho, "\"" + Application.ExecutablePath + "\"");
          }
      }
      catch
      {
          throw;
      }
  }
   Public Sub AdicionarAplicacaoAoIniciar()
        Try
            Using key As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
                key.SetValue(caminho, """" + Application.ExecutablePath + """")
            End Using
        Catch
            Throw
        End Try
    End Sub

 O segundo será para remover a aplicação do Registro:

public  void RemoverAplicacaoAoIniciar()
 {
      try
      {
          using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
          {
              key.DeleteValue(caminho, false);
          }
      }
      catch
      {
          throw;
     }
 }
Public Sub RemoverAplicacaoAoIniciar()
  Try
       Using key As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
	key.DeleteValue(caminho, False)
       End Using
  Catch  
      Throw
  End Try
End Sub

A variável caminho representa o caminho da aplicação que você deseja que seja executada quando o Windows iniciar.

Por exemplo:  

string caminho = @"C:\_vbn\Consulta_Cep\Consulta_Cep\bin\Debug\Consulta_Cep.exe";

Agora em cada botão de comando basta chamar os métodos acima:

        private void btnIniciarApp_Click(object sender, EventArgs e)
        {
            try
            {
                AdicionarAplicacaoAoIniciar();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro " + ex.Message,"Erro",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

        private void btnRemoverAppRegistro_Click(object sender, EventArgs e)
        {
            try
            {
                RemoverAplicacaoAoIniciar();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Private Sub btnIniciarApp_Click(sender As Object, e As EventArgs)
	Try
		AdicionarAplicacaoAoIniciar()
	Catch ex As Exception
		MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.[Error])
	End Try
End Sub
Private Sub btnRemoverAppRegistro_Click(sender As Object, e As EventArgs)
	Try
		RemoverAplicacaoAoIniciar()
	Catch ex As Exception
		MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.[Error])
	End Try
End Sub

 

Este código foi testado no meu Windows 8.1 e funcionou, mas, eu não garanto que vá funcionar em todos os ambientes devido a particularidades de cada ambiente de usuário.

Pegue o projeto completo aqui :  Consulta_APP_Ao_Iniciar.zip

Eu sou a videira verdadeira, e meu Pai é o lavrador.
Toda a vara em mim, que não dá fruto, a tira; e limpa toda aquela que dá fruto, para que dê mais fruto.

João 15:1,2

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti