Gerenciando aplicativos padrão

O recurso Definir Acesso ao Programa e Padrões de Computador (SPAD) foi adicionado ao Windows XP e versões posteriores do Windows para gerenciar padrões por computador. Além do SPAD, o Windows Vista introduziu o conceito de aplicativos padrão por usuário e o item Programas Padrão no Painel de Controle.

Importante

Este tópico não se aplica a Windows 10. A forma como as associações de arquivo padrão funcionam foi alterada em Windows 10. Para obter mais informações, consulte a seção Alterações em como Windows 10 lida com aplicativos padrãonesta postagem.

 

As configurações padrão por usuário são específicas para uma conta de usuário individual no sistema. Se as configurações padrão por usuário estiverem presentes, elas têm precedência sobre os padrões correspondentes por computador para essa conta. A partir de Windows 8, o sistema de extensibilidade para padrões de tipo de arquivo e protocolo é estritamente por usuário e os padrões por computador são ignorados. O SPAD também foi alterado em Windows 8 para definir padrões por usuário.

  • Em sistemas que executam versões do Windows anteriores a Windows 8, uma conta de usuário recém-criada recebe padrões por computador até que os padrões por usuário sejam estabelecidos. No Windows Vista e posteriores, os usuários podem usar o item Programas Padrão em Painel de Controle para definir ou alterar seus padrões por usuário. Além disso, quando um aplicativo é executado pela primeira vez, os padrões por usuário podem ser definidos usando as diretrizes a seguir na seção Application First Run and Defaults .
  • Em sistemas que executam Windows 8, não há mais suporte para uma conta de usuário recém-criada por usuário desde o início e a configuração desses padrões na primeira execução, conforme explicado na seção Application First Run and Defaults.

Um aplicativo deve se registrar com o SPAD e o recurso Programas Padrão a serem oferecidos como o programa padrão no Windows Vista e posterior.

Este tópico fornece ISVs (fornecedores de software independentes) com um guia rápido para as etapas necessárias para registrar e gerenciar padrões de aplicativos no Windows Vista e posteriores. Os links são fornecidos para artigos mais detalhados sobre o tópico de cada seção.

Item de Programas Padrão no Painel de Controle

Programas Padrão é um recurso introduzido no Windows Vista, acessível diretamente no menu Iniciar, bem como Painel de Controle. Ele fornece uma nova infraestrutura que funciona com privilégios de usuário padrão (não elevados) e foi projetado para permitir que usuários e aplicativos gerenciem padrões por usuário. Para os usuários, os Programas Padrão fornecem uma maneira unificada e facilmente acessível de gerenciar padrões, associações de arquivos e configurações de reprodução automática em todos os aplicativos no sistema. Para aplicativos, o uso do escopo por usuário fornecido pelas APIs de Programas Padrão oferece as seguintes vantagens:

  • Sem elevação

    Um aplicativo não precisa elevar seus privilégios para reivindicar padrões.

  • Boa Cidadania

    Em um computador de vários usuários, cada usuário pode selecionar aplicativos padrão diferentes.

  • Gerenciamento Padrão

    As APIs de Programas Padrão oferecem um mecanismo confiável e consistente para verificar automaticamente a status padrão e recuperar configurações perdidas sem recorrer à gravação diretamente no registro. No entanto, a partir de Windows 8, não recomendamos que os aplicativos consultem o padrão status porque um aplicativo não pode mais alterar as configurações padrão— essas alterações só podem ser feitas pelo usuário.

Para permitir que seu aplicativo gerencie os padrões com eficiência, você deve registrar seu aplicativo como um programa padrão em potencial. Para obter detalhes sobre como registrar e usar as APIs de Programas Padrão, consulte Programas Padrão.

Os Programas Padrão também fornecem estes dois recursos:

  • Interface do usuário padrão reutilizável

    A interface do usuário dos padrões do programa (Definir seus programas padrão) e associações de arquivo (Associar um tipo de arquivo ou protocolo a um programa) pode ser reutilizado e chamado de dentro de um aplicativo. Isso permite que os aplicativos forneçam uma experiência de usuário padrão para gerenciar padrões e salva os ISVs de terem que desenvolver uma interface do usuário personalizada ou equivalente.

  • Inclusão de informações de URL e marketing

    Como parte da página Definir seus programas padrão do item Programas Padrão no Painel de Controle, um aplicativo pode fornecer informações de marketing e um link para o site do fornecedor. Essa URL é derivada do certificado Authenticode com o qual o aplicativo foi assinado. Isso impede o uso indevido e a substituição não autorizada desse link. Se um aplicativo tiver um certificado Authenticode que inclua uma URL inserida, a interface do usuário do Windows exibirá essa URL inserida. Os ISVs devem aproveitar esse recurso para direcionar os usuários para seu site para atualizações e outros downloads.

Definir o acesso ao programa e os padrões do computador

Definir o SPAD (Acesso ao Programa e Padrões de Computador ) permite que os administradores gerenciem padrões de todo o computador herdados por todos os novos usuários desse computador. Antes de Windows 8, o SPAD também permitia que os administradores reparassem as associações de arquivos caso elas fossem interrompidas quando os programas fossem removidos do sistema. No entanto, a partir de Windows 8, o SPAD afeta apenas os padrões específicos do usuário.

Para obter mais informações sobre como registrar um aplicativo no SPAD, consulte Trabalhando com definir o acesso ao programa e os padrões do computador (SPAD) e registrar programas com tipos de cliente. Alterações específicas e novas recomendações são discutidas nas seções a seguir.

Definindo padrões no SPAD

Os padrões por usuário substituem os padrões por computador.

  • Antes de Windows 8: os padrões definidos no SPAD (que são por computador) não serão vistos pelos usuários se os padrões correspondentes por usuário forem definidos. Se um usuário não tiver definido um padrão por usuário, o sistema usará o padrão do computador correspondente. As novas contas de usuário em um computador herdam inicialmente os padrões do computador. Na primeira vez que um usuário executa um aplicativo, o aplicativo deve solicitar que o usuário atribua seus padrões por usuário. Consulte Application First Run e Defaults.
  • A partir de Windows 8: todos os padrões são por usuário e qualquer configuração padrão por computador é ignorada. Os aplicativos não podem mais definir opções padrão, portanto, não podem orientar o usuário pela atribuição desses padrões.

Quando um aplicativo pré-Windows 8 implementa Set como Default no SPAD, essas diretrizes devem ser seguidas:

  • Os aplicativos devem reivindicar apenas padrões no nível do computador por meio do SPAD.
  • Os aplicativos não devem reivindicar padrões por usuário por meio do SPAD.

Quando um aplicativo Windows 8 implementa Set as Default no SPAD, ele deve registrar seus tipos de arquivo e protocolos em Programas Padrão, usando o mesmo nome de aplicativo usado no SPAD. Isso permite que uma alteração no SPAD seja refletida como uma alteração na entrada de Programas Padrão correspondente para o usuário atual.

Ocultar o acesso no SPAD

A opção ocultar acesso para cada padrão possível no SPAD é acessada de uma das duas maneiras:

  • Escolha a categoria padrão não Microsoft , que remove o acesso a todos os padrões da Microsoft.
  • Escolha a categoria Personalizado e desmarque a caixa Habilitar acesso a este programa marcar.

Anteriormente, a tomada de qualquer uma dessas ações removeu todos os pontos de entrada para os aplicativos apropriados no sistema. Diretrizes específicas para essa situação dizem para remover atalhos e ícones dos seguintes locais:

  • Área de Trabalho
  • Menu Iniciar
  • Barra de Início Rápido (Somente Windows Vista e anterior)
  • Área de notificação
  • Menus de atalho
  • Faixa de tarefas da pasta

Os fornecedores são incentivados a implementar essas diretrizes na função de retorno de chamada Ocultar Acesso do aplicativo.

Método Alternate Hide Access no SPAD

Para alguns aplicativos herdados, uma implementação completa de Ocultar Acesso pode não ser prática. Um método alternativo que obtém o mesmo efeito, mas não é facilmente reversível pelo usuário, é desinstalar o aplicativo. O exemplo a seguir mostra o comportamento de exemplo e o código de exemplo para implementar isso.

A experiência recomendada do usuário para essa alternativa é a seguinte:

  • Quando o usuário limpa a caixa Habilitar acesso a este programa no SPAD, a interface do usuário a seguir é apresentada.

    caixa de diálogo vista sobre como ocultar o acesso ao programa

  • Quando o usuário clica em OK, o item Programas e Recursos no Painel de Controle é exibido para que o usuário possa desinstalar o aplicativo.

  • Os usuários do Windows XP devem ser apresentados com a caixa de diálogo a seguir.

    caixa de diálogo windows xp sobre como ocultar o acesso ao programa

  • Quando o usuário do Windows XP clica em OK, o item Adicionar ou Remover Programas no Painel de Controle é exibido para que o usuário possa desinstalar o aplicativo.

O código a seguir fornece uma implementação reutilizável para o recurso Ocultar Acesso, conforme descrito anteriormente. Ele pode ser usado no Windows XP, Windows Vista e Windows 7.

#include <windows.h>
#include <shlwapi.h>
#include <strsafe.h>

PCWSTR c_pszMessage1 = L"To hide access to this program, you need to uninstall it by ";
PCWSTR c_pszMessage2 = L"using\n%s in Control Panel.\n\nWould you like to start %s?";
PCWSTR c_pszApplicationName  = L"Sample App";

int _tmain(int argc, WCHAR* argv[])
{
    OSVERSIONINFO version;
    version.dwOSVersionInfoSize = sizeof(version);

    if (GetVersionEx(&version))
    {
        PCWSTR pszCPLName = NULL;

        if (version.dwMajorVersion >= 6)
        {
            // Windows Vista and later
            pszCPLName = L"Programs and Features";
        }
        else if (version.dwMajorVersion == 5 &&
                 version.dwMinorVersion == 1)
        {
            // XP
            pszCPLName = L"Add/Remove Programs";
        }

        if (pszCPLName != NULL)
        {
            WCHAR szMessage[256], szScratch[256];
            if (SUCCEEDED(StringCchPrintf(szScratch, 
                                          ARRAYSIZE(szScratch), 
                                          c_pszMessage2, 
                                          pszCPLName, 
                                          pszCPLName)))
            {
                if (SUCCEEDED(StringCchCopy(szMessage, 
                                            ARRAYSIZE(szMessage), 
                                            c_pszMessage1)))
                {
                    if (SUCCEEDED(StringCchCat(szMessage, 
                                               ARRAYSIZE(szMessage), 
                                               szScratch)))
                    {
                        if (IDOK == MessageBox(NULL, 
                                               szMessage, 
                                               c_pszApplicationName, 
                                               MB_OKCANCEL))
                        {
                            ShellExecute(NULL, 
                                         NULL, 
                                         L"appwiz.cpl", 
                                         NULL, 
                                         NULL, 
                                         SW_SHOWNORMAL);
                        }
                    }
                }
            }
        }
    }
    return 0;
}

Registrando-se em pontos de entrada do aplicativo

Um aplicativo pode ter muitos pontos de entrada dentro do sistema operacional. Estes são os locais recomendados para pontos de entrada:

  • Área de Trabalho
  • Menu Iniciar
  • Barra de Início Rápido (Somente Windows Vista e anterior)
  • Área de notificação
  • Menus de atalho
  • Faixa de tarefas da pasta

Esta seção se concentra nessas áreas específicas:

Abrir com

O menu Abrir com atalho permite que o usuário selecione um aplicativo que possa lidar com um tipo de arquivo específico. Embora Open With possa ser usado para abrir um arquivo com um aplicativo uma vez, ele também pode ser usado para definir o padrão para essa extensão de nome de arquivo. Portanto, um aplicativo deve sempre se registrar para Abrir com para que os usuários sejam apresentados com esse aplicativo como uma opção. Os aplicativos podem registrar tipos de arquivo e protocolos para Open With. Os aplicativos que registram protocolos na estrutura Programas Padrão são adicionados automaticamente às opções Abrir com para protocolos.

Para obter informações sobre como se registrar no Open With, consulte Introdução às associações de arquivos.

Menu Iniciar e Barra de Início Rápido

Para se tornar mais detectável para o usuário, os aplicativos podem adicionar atalhos a vários locais no Windows. O lugar mais comum para adicionar um atalho é o menu Iniciar . No Windows Vista e posteriores, um aplicativo cria um atalho na pasta oculta %ProgramData%\Microsoft\Windows\Start Menu\Programs para aparecer na lista de programas do menu Iniciar para todos os usuários. Normalmente, um aplicativo adiciona uma subpasta que contém o atalho.

Para programas de navegador e email, o menu Iniciar do Windows Vista também apresenta dois links dedicados fora da lista de programas, canonicamente intitulado Internet e Email. Depois que um aplicativo se registra nessas categorias, a estrutura Programas Padrão pode gerenciar o que é iniciado por meio desses links.

Observação

Os links de menu Iniciar dedicados à Internet e email não estão mais presentes a partir do Windows 7.

 

Para aumentar ainda mais a capacidade de descoberta, os aplicativos também podem adicionar atalhos à área de trabalho e à barra de Início Rápido. Os aplicativos devem solicitar permissão ao usuário (geralmente durante a instalação ou na primeira execução) antes de adicionar um ícone ao menu Iniciar , à área de trabalho ou à barra de Início Rápido.

Observação

A barra de Início Rápido não está mais disponível a partir do Windows 7. A alternativa do Windows 7 é ter o aplicativo fixado na Barra de Tarefas, mas a fixação não pode ser feita programaticamente, pois é estritamente uma opção do usuário.

 

Para saber mais, consulte esses tópicos:

Instalação e padrões do aplicativo

Os procedimentos de instalação do aplicativo não foram alterados fundamentalmente desde o Windows XP, com exceção de uma nova diretriz para sistemas que executam versões do Windows com mais de Windows 8: use os padrões por computador no momento da instalação, mas não defina nenhum padrão por usuário até que esse usuário execute o aplicativo pela primeira vez. (Consulte Application First Run and Defaults.) Os aplicativos não devem definir padrões por usuário durante a instalação porque há situações em que a pessoa que instala o aplicativo não é o usuário pretendido. A partir de Windows 8, não há suporte para padrões por computador e os aplicativos não podem alterar as configurações padrão por usuário.

Durante a instalação, um aplicativo deve copiar seus binários para o disco rígido e gravar seus ProgIDs no Registro. O aplicativo também deve se registrar para Programas Padrão e Abrir com neste momento para cada associação de arquivo que ele é um candidato a manipular. O aplicativo pode usar a subchave OpenWithProgIds para se registrar no Open With.

Para saber mais, consulte esses tópicos:

Atualizações e padrões do aplicativo

Muitos aplicativos têm a capacidade de se atualizar ao longo do tempo. Esse procedimento de atualização não deve alterar o estado dos padrões por usuário porque essa alteração seria inesperada para o usuário. No entanto, é aceitável que um aplicativo marcar associações de arquivos no nível do computador e repare-as se elas tiverem sido corrompidas.

Application First Run and Defaults

Observação

A partir de Windows 8, o sistema manipula esse procedimento em nome de todos os aplicativos. Os próprios aplicativos não podem mais consultar e alterar padrões. Somente o usuário pode fazer isso. Portanto, os aplicativos não devem tentar consultar o padrão atual ou alterar esse padrão por meio de qualquer mecanismo. No entanto, os aplicativos podem fornecer um ponto de entrada para Programas Padrão no Painel de Controle chamando o método LaunchAdvancedAssociationUI da interface IApplicationAssociationRegistrationUI.

 

Com a introdução de padrões por usuário no Windows Vista, é importante que os aplicativos que contestam extensões populares de nome de arquivo forneçam uma experiência comum do usuário para reivindicar essas extensões. Como esses padrões agora são definidos no contexto do usuário, eles devem se apresentar como uma possibilidade padrão somente quando o usuário executar o programa após a instalação.

A diretriz para estabelecer padrões por usuário é a seguinte: quando um aplicativo é executado pela primeira vez para um usuário específico, esse aplicativo deve solicitar preferências de usuário para padrões e associações de arquivos para si mesmo.

A interface do usuário recomendada deve fornecer duas opções claras para o usuário:

  1. Aceite todos os padrões que o aplicativo gostaria de reivindicar. Essa opção também pode definir outras propriedades padrão do aplicativo, como privacidade ou configurações de atualização automática. Essa opção permite que o aplicativo requeira todos os seus padrões registrados.
  2. Personalize aceitando ou não aceitando seleções padrão e configurações de programa individualmente. Essa opção apresenta mais interface do usuário que permite que o usuário faça escolhas granulares para suas opções padrão.

Para obter mais informações, consulte Programas padrão.

Observação

Não há suporte para isso a partir de Windows 8.

 

Depois que um aplicativo se registra com programas padrão no Windows Vista e posteriores, determinadas APIs ficam disponíveis para o aplicativo. Por exemplo, um aplicativo pode precisar marcar se ele é o programa padrão. A interface IApplicationAssociationRegistration fornece métodos para fazer isso.

Qualquer aplicativo que queira reivindicar padrões deve primeiro perguntar ao usuário e nunca reivindicar padrões sem permissão. O usuário deve ser questionado se deseja tornar o aplicativo o padrão ou deixar o padrão atual em vigor. Também deve haver uma opção para não fazer essa pergunta novamente depois que o usuário tiver feito sua escolha.

Para obter mais informações, consulte Programas padrão.

Dicas de compatibilidade do aplicativo

Esta seção fornece algumas dicas de compatibilidade de aplicativos relacionadas à experiência de Programas Padrão no Windows.

Evitar disparar Per-User virtualização

Com o ambiente UAC (controle de conta de usuário), os aplicativos sempre devem ser executados com apenas direitos de usuário padrão para obter a melhor experiência do cliente. Por motivos de segurança, aplicativos com um nível de privilégio de usuário padrão são impedidos de gravar em determinadas partes do registro e em determinados arquivos do sistema. O Windows Vista e versões posteriores do Windows fornecem uma camada de compatibilidade temporária de aplicativos (AppCompat) para ajudar os aplicativos a fazer a transição. As tentativas bloqueadas de gravar no registro ou nos arquivos do sistema são "virtualizadas" para que o aplicativo continue a ser executado, mas as áreas confidenciais do sistema não são alteradas. No entanto, os aplicativos não devem depender da tecnologia AppCompat como uma solução de longo prazo. Em vez disso, os aplicativos devem usar as muitas ferramentas disponíveis para verificar se podem ser executados com êxito sob os direitos de usuário padrão. Algumas reprogramações do aplicativo podem ser necessárias para fazer isso, mas ela deve ser feita no interesse da compatibilidade de longo prazo.

Evitar avisos ou blocos do AppCompat do Assistente de Compatibilidade do Programa

O PCA (Assistente de Compatibilidade de Programas) é fornecido no Windows Vista e posterior. Sua finalidade é fornecer um método automatizado para que programas mais antigos com problemas de compatibilidade funcionem melhor. O PCA monitora programas para problemas conhecidos. Se um problema for detectado, ele notificará o usuário sobre o problema e se oferecerá para aplicar soluções eficazes antes que o usuário execute o programa novamente. Para evitar ver esses avisos ou blocos, os ISVs devem usar as muitas ferramentas disponíveis para garantir que seus aplicativos sejam compatíveis com o Windows Vista, o Windows 7 e posteriores.

Suporte para versões anteriores do sistema operacional Windows

A infraestrutura de Programas Padrão não está disponível em nenhum sistema operacional Windows antes do Windows Vista. Portanto, quando os aplicativos se movem para a nova infraestrutura de Programas Padrão, eles devem manter seu código padrão de aplicativo mais antigo para manter a compatibilidade com versões mais antigas do Windows. Um aplicativo deve executar uma versão do sistema operacional marcar como parte de sua instalação para determinar qual código padrão do aplicativo deve ser executado.

Para dar suporte a uma atualização do Windows XP para o Windows Vista ou posterior, os aplicativos devem adicionar todas as entradas do Registro necessárias para Programas Padrão mesmo quando estiverem sendo instalados em um computador que executa o Windows XP. O registro não terá efeito em um computador que executa o Windows XP, mas se o computador for atualizado posteriormente, o aplicativo já será registrado e poderá aproveitar a estrutura.

Para obter mais informações, consulte OSVERSIONINFO.

Recursos adicionais

Práticas recomendadas para associações de arquivos

Cenário de exemplo de associação de arquivos

Programas padrão

Trabalhando com definir o acesso ao programa e os padrões do computador (SPAD)