Compartilhar via


Registro de aplicativo

Este tópico discute como os aplicativos podem expor informações sobre si mesmos necessárias para habilitar determinados cenários. Isso inclui informações necessárias para localizar o aplicativo, os verbos aos quais o aplicativo dá suporte e os tipos de arquivos que um aplicativo pode manipular.

Este tópico é organizado da seguinte maneira:

Observação

Os aplicativos também podem ser registrados nos aplicativos do painel de controle Definir Acesso ao Programa e Padrões do Computador (SPAD) e Definir Seus Programas Padrão (SYDP). Para obter informações sobre o registro de aplicativo SPAD e SYDP, consulte Diretrizes para associações de arquivos e programas padrão e Definir O acesso ao programa e padrões de computador (SPAD).

Localizando um executável de aplicativo

Quando a função ShellExecuteEx é chamada com o nome de um arquivo executável em seu parâmetro lpFile , há vários locais em que a função procura o arquivo. É recomendável registrar seu aplicativo na subchave do Registro de Caminhos de Aplicativo . Isso evita a necessidade de aplicativos modificarem a variável de ambiente PATH do sistema.

O arquivo é procurado nos seguintes locais:

  • O diretório de trabalho atual.
  • Somente o diretório do Windows (nenhum subdiretório é pesquisado).
  • O diretório Windows\System32 .
  • Diretórios listados na variável de ambiente PATH.
  • Recomendado: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Registrando aplicativos

As subchaves de Registro de Aplicativos e Caminhos de Aplicativo são usadas para registrar e controlar o comportamento do sistema em nome dos aplicativos. A subchave Caminhos do Aplicativo é o local preferencial.

Usando a subchave Caminhos do Aplicativo

No Windows 7 e posterior, é altamente recomendável instalar aplicativos por usuário em vez de por computador. Um aplicativo instalado para por usuário pode ser registrado em HKEY_CURRENT_USER\Caminhos\ deaplicativo doMicrosoft\Windows\CurrentVersion\. Um aplicativo instalado para todos os usuários do computador pode ser registrado em HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths.

As entradas encontradas em Caminhos de Aplicativo são usadas principalmente para as seguintes finalidades:

  • Para mapear o nome de arquivo executável de um aplicativo para o caminho totalmente qualificado desse arquivo.
  • Para obter informações pré-pendentes para a variável de ambiente PATH por aplicativo, por processo.

Se o nome de uma subchave de Caminhos de Aplicativo corresponder ao nome do arquivo, o Shell executará duas ações:

  • A entrada (padrão) é usada como o caminho totalmente qualificado do arquivo.
  • A entrada Caminho para essa subchave está pré-pendente para a variável de ambiente PATH desse processo. Se isso não for necessário, o valor path poderá ser omitido.

Os possíveis problemas a serem considerados incluem:

  • O Shell limita o comprimento de uma linha de comando a MAX_PATH * 2 caracteres. Se houver muitos arquivos listados como entradas do Registro ou seus caminhos forem longos, os nomes de arquivo posteriormente na lista poderão ser perdidos à medida que a linha de comando for truncada.
  • Alguns aplicativos não aceitam vários nomes de arquivo em uma linha de comando.
  • Alguns aplicativos que aceitam vários nomes de arquivo não reconhecem o formato no qual o Shell os fornece. O Shell fornece a lista de parâmetros como uma cadeia de caracteres entre aspas, mas alguns aplicativos podem exigir cadeias de caracteres sem aspas.
  • Nem todos os itens que podem ser arrastados fazem parte do sistema de arquivos; por exemplo, impressoras. Esses itens não têm um caminho Win32 padrão, portanto, não há como fornecer um valor lpParameters significativo para ShellExecuteEx.

O uso da entrada DropTarget evita esses possíveis problemas fornecendo acesso a todos os formatos da área de transferência, incluindo CFSTR_SHELLIDLIST (para listas de arquivos longas) e CFSTR_FILECONTENTS (para objetos que não são do sistema de arquivos).

Para registrar e controlar o comportamento de seus aplicativos com a subchave Caminhos do Aplicativo:

  1. Adicione uma subchave com o mesmo nome do arquivo executável à subchave Caminhos do Aplicativo , conforme mostrado na entrada do Registro a seguir.

    HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
       SOFTWARE
          Microsoft
             Windows
                CurrentVersion
                   App Paths
                      file.exe
                         (Default)
                         DontUseDesktopChangeRouter
                         DropTarget
                         Path
                         UseUrl
    
  2. Consulte a tabela a seguir para obter detalhes sobre as entradas de subchave de Caminhos de Aplicativo .

Entrada de registro Detalhes
(Padrão) É o caminho totalmente qualificado para o aplicativo. O nome do aplicativo fornecido na entrada (Padrão) pode ser declarado com ou sem sua extensão .exe. Se necessário, a função ShellExecuteEx adiciona a extensão ao pesquisar a subchave Caminhos do Aplicativo . A entrada é do tipo REG_SZ .
DontUseDesktopChangeRouter É obrigatório para aplicativos de depurador evitar deadlocks de caixa de diálogo de arquivo ao depurar o processo de Explorer do Windows. No entanto, definir a entrada DontUseDesktopChangeRouter produz uma manipulação um pouco menos eficiente das notificações de alteração. A entrada é do tipo REG_DWORD e o valor é 0x1.
DropTarget É um CLSID (identificador de classe). A entrada DropTarget contém o CLSID de um objeto (geralmente um servidor local em vez de um servidor em processo) que implementa IDropTarget. Por padrão, quando o destino de soltar é um arquivo executável e nenhum valor DropTarget é fornecido, o Shell converte a lista de arquivos descartados em um parâmetro de linha de comando e o passa para ShellExecuteEx por meio de lpParameters.
Caminho Fornece uma cadeia de caracteres (na forma de uma lista separada por ponto e vírgula de diretórios) para acrescentar à variável de ambiente PATH quando um aplicativo é iniciado chamando ShellExecuteEx. É o caminho totalmente qualificado para o .exe. É de REG_SZ. No Windows 7 e posterior, o tipo pode ser REG_EXPAND_SZ e geralmente é REG_EXPAND_SZ %ProgramFiles%. Nota: Além das entradas (Padrão), Path e DropTarget reconhecidas pelo Shell, um aplicativo também pode adicionar valores personalizados à subchave Caminhos de Aplicativo do arquivo executável. Incentivamos os desenvolvedores de aplicativos a usar a subchave Caminhos do Aplicativo para fornecer um caminho específico do aplicativo em vez de fazer adições ao caminho do sistema global.
SupportedProtocols Cria uma cadeia de caracteres que contém os esquemas de protocolo de URL para uma determinada chave. Isso pode conter vários valores de Registro para indicar quais esquemas têm suporte. Essa cadeia de caracteres segue o formato de scheme1:scheme2. Se essa lista não estiver vazia, arquivo: será adicionado à cadeia de caracteres. Esse protocolo tem suporte implícito quando SupportedProtocols é definido.
UseUrl Indica que seu aplicativo pode aceitar uma URL (em vez de um nome de arquivo) na linha de comando. Os aplicativos que podem abrir documentos diretamente da Internet, como navegadores da Web e media players, devem definir essa entrada.
Quando a função ShellExecuteEx inicia um aplicativo e o valor UseUrl=1 não está definido, ShellExecuteEx baixa o documento para um arquivo local e invoca o manipulador na cópia local.
Por exemplo, se o aplicativo tiver esse conjunto de entradas e um usuário clicar com o botão direito do mouse em um arquivo armazenado em um servidor Web, o verbo Abrir será disponibilizado. Caso contrário, o usuário precisará baixar o arquivo e abrir a cópia local.
A entrada UseUrl é do tipo REG_DWORD e o valor é 0x1.
No Windows Vista e anteriores, essa entrada indicava que a URL deveria ser passada para o aplicativo junto com um nome de arquivo local, quando chamada por meio de ShellExecuteEx. No Windows 7, isso indica que o aplicativo pode entender qualquer URL http ou https passada para ele, sem precisar fornecer o nome do arquivo de cache também. Essa chave do Registro está associada à chave SupportedProtocols .

Usando a subchave Applications

Por meio da inclusão de entradas do Registro na subchave HKEY_CLASSES_ROOT\Applications\ApplicationName.exe , os aplicativos podem fornecer as informações específicas do aplicativo mostradas na tabela a seguir.

Entrada de registro Descrição
shell\verbo Fornece o método verbo para chamar o aplicativo do OpenWith. Sem uma definição de verbo especificada aqui, o sistema pressupõe que o aplicativo dá suporte a CreateProcess e passa o nome do arquivo na linha de comando. Essa funcionalidade se aplica a todos os métodos verbos, incluindo DropTarget, ExecuteCommand e DDE (Dynamic Data Exchange).
Defaulticon Permite que um aplicativo forneça um ícone específico para representar o aplicativo em vez do primeiro ícone armazenado no arquivo .exe.
FriendlyAppName Fornece uma maneira de obter um nome localizável a ser exibido para um aplicativo em vez de apenas as informações de versão aparecerem, o que pode não ser localizável. A consulta de associação ASSOCSTR lê esse valor de entrada do Registro e volta a usar o nome FileDescription nas informações de versão. Se esse nome estiver ausente, a consulta de associação usará como padrão o nome de exibição do arquivo. Os aplicativos devem usar ASSOCSTR_FRIENDLYAPPNAME para recuperar essas informações para obter o comportamento adequado.
Supportedtypes Lista os tipos de arquivo aos quais o aplicativo dá suporte. Isso permite que o aplicativo seja listado no menu em cascata da caixa de diálogo Abrir com .
NoOpenWith Indica que nenhum aplicativo foi especificado para abrir esse tipo de arquivo. Lembre-se de que, se uma subchave OpenWithProgIDs tiver sido definida para um aplicativo por tipo de arquivo e a subchave ProgID em si também não tiver uma entrada NoOpenWith, esse aplicativo aparecerá na lista de aplicativos recomendados ou disponíveis, mesmo se tiver especificado a entrada NoOpenWith. Para obter mais informações, consulte Como incluir um aplicativo na caixa de diálogo Abrir com e Como excluir um aplicativo da caixa de diálogo Abrir com.
IsHostApp Indica que o processo é um processo de host, como Rundll32.exe ou Dllhost.exe, e não deve ser considerado para fixação ou inclusão do menu Iniciar na lista MFU (Usado com Mais Frequência). Quando iniciado com um atalho que contém uma lista de argumentos não nulos ou uma IDs explícitas do Modelo de Usuário do Aplicativo (AppUserModelIDs), o processo pode ser fixado (como esse atalho). Esses atalhos são candidatos à inclusão na lista de MFU.
NoStartPage Indica que o executável do aplicativo e os atalhos devem ser excluídos do menu Iniciar e da fixação ou inclusão na lista MFU. Normalmente, essa entrada é usada para excluir ferramentas do sistema, instaladores e desinstaladores e arquivos leiame.
UseExecutableForTaskbarGroupIcon Faz com que a barra de tarefas use o ícone padrão desse executável se não houver nenhum atalho fixável para este aplicativo e, em vez do ícone da janela que foi encontrada pela primeira vez.
TaskbarGroupIcon Especifica o ícone usado para substituir o ícone da barra de tarefas. O ícone de janela normalmente é usado para a barra de tarefas. Definir a entrada TaskbarGroupIcon faz com que o sistema use o ícone do .exe para o aplicativo.

Exemplos

Alguns exemplos de registros de aplicativo por meio da subchave ApplicationName.exe\aplicativos\ HKEY_CLASSES_ROOT são os seguintes. Todos os valores de entrada do Registro são do tipo REG_SZ , com exceção de DefaultIcon , que é do tipo REG_EXPAND_SZ .

HKEY_CLASSES_ROOT
   Applications
      wordpad.exe
         FriendlyAppName = @%SystemRoot%\System32\shell32.dll,-22069
HKEY_CLASSES_ROOT
   Applications
      wmplayer.exe
         SupportedTypes
            .3gp2
HKEY_CLASSES_ROOT
   Applications
      wmplayer.exe
         DefaultIcon
            (Default) = %SystemRoot%\system32\wmploc.dll,-730
HKEY_CLASSES_ROOT
   Applications
      WScript.exe
         NoOpenWith
HKEY_CLASSES_ROOT
   Applications
      photoviewer.dll
         shell
            open
               DropTarget
                  Clsid = {FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}
HKEY_CLASSES_ROOT
   Applications
      mspaint.exe
         SupportedTypes
            .bmp
            .dib
            .rle
            .jpg
            .jpeg
            .jpe
            .jfif
            .gif
            .emf
            .wmf
            .tif
            .tiff
            .png
            .ico

Registrando verbos e outras informações de associação de arquivo

Subchaves registradas em HKEY_CLASSES_ROOT\SystemFileAssociations permitem que o Shell defina o comportamento padrão de atributos para tipos de arquivo e habilite associações de arquivos compartilhados. Quando os usuários alteram o aplicativo padrão para um tipo de arquivo, o ProgID do novo aplicativo padrão tem prioridade no fornecimento de verbos e outras informações de associação. Essa prioridade ocorre porque ela é a primeira entrada na matriz de associação. Se o programa padrão for alterado, as informações no ProgID anterior não estarão mais disponíveis.

Para lidar proativamente com as consequências de uma alteração nos programas padrão, você pode usar HKEY_CLASSES_ROOT\SystemFileAssociations para registrar verbos e outras informações de associação. Devido à localização após o ProgID na matriz de associação, esses registros são de prioridade mais baixa. Esses SystemFileAssociationsregistrations são estáveis mesmo quando os usuários alteram os programas padrão e fornecem um local para registrar verbos secundários que sempre estarão disponíveis para um tipo de arquivo específico. Para obter um exemplo de registro, consulte Registrando um tipo percebido mais adiante neste tópico.

O exemplo de registro a seguir mostra o que acontece quando o usuário executa o item Programas Padrão no Painel de Controle para alterar o padrão de arquivos .mp3 para App2ProgID. Depois de alterar o padrão, Verb1 não estará mais disponível e Verb2 se tornará o padrão.

HKEY_CLASSES_ROOT
   .mp3
      (Default) = App1ProgID
HKEY_CLASSES_ROOT
   App1ProgID
      shell
         Verb1
HKEY_CLASSES_ROOT
   App2ProgID
      shell
         Verb2

Registrando um tipo percebido

Os valores do Registro para tipos percebidos são definidos como subchaves da subchave do registro HKEY_CLASSES_ROOT\SystemFileAssociations . Por exemplo, o texto de tipo percebido é registrado da seguinte maneira:

HKEY_CLASSES_ROOT
   SystemFileAssociations
      text
         shell
            edit
               command
                  (Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
            open
               command
                  (Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"

O tipo percebido de um tipo de arquivo é indicado incluindo um valor PerceivedType na subchave do tipo de arquivo. O valor PerceivedType é definido como o nome do tipo percebido registrado em HKEY_CLASSES_ROOT\ subchave do RegistroSystemFileAssociations, conforme mostrado no exemplo anterior do Registro. Para declarar arquivos .cpp como sendo do tipo percebido "text", por exemplo, adicione a seguinte entrada do Registro:

HKEY_CLASSES_ROOT
   .cpp
      PerceivedType = text

Tipos de arquivo

Como funcionam as associações de arquivo

Exibição de conteúdo por tipo de arquivo ou tipo

Verificador de Tipo de Arquivo

Manipuladores de tipo de arquivo

Identificadores programáticos

Tipos percebidos

Matrizes de associação