Diretrizes para aplicativos

Os aplicativos em execução no Windows Vista e no Windows Server 2008 devem seguir essas diretrizes para garantir que o Gerenciador de Reinicialização possa desligar e reiniciar aplicativos, se necessário, para instalar atualizações. Os serviços podem usar as diretrizes descritas em Diretrizes para Serviços.

  • O Gerenciador de Reinicialização consulta aplicativos de GUI para desligamento enviando uma notificação WM_QUERYENDSESSION que tem o parâmetro lParam definido como ENDSESSION_CLOSEAPP (0x1). Os aplicativos não devem ser desligados quando recebem uma mensagem WM_QUERYENDSESSION porque outro aplicativo pode não estar pronto para ser desligado. Os aplicativos de GUI devem escutar a mensagem WM_QUERYENDSESSION e retornar um valor true se o aplicativo estiver preparado para desligar e reiniciar. Se nenhum aplicativo retornar um valor false, o Gerenciador de Reinicialização enviará uma mensagem WM_ENDSESSION com o parâmetro lParam definido como ENDSESSION_CLOSEAPP (0x1) e o parâmetro wparam definido como TRUE. Os aplicativos devem ser desligados somente quando receberem a mensagem WM_ENDSESSION . O Gerenciador de Reinicialização também envia uma mensagem de WM_CLOSE para aplicativos de GUI que não são desligados ao receber WM_ENDSESSION. Se qualquer aplicativo de GUI responder a uma mensagem WM_QUERYENDSESSION retornando um valor false, o desligamento será cancelado. No entanto, se o desligamento for forçado, o aplicativo será encerrado independentemente.

  • Quando um aplicativo de GUI recebe uma mensagem de WM_ENDSESSION , o aplicativo deve se preparar para desligar dentro do período de tempo limite especificado. No mínimo, os aplicativos devem se preparar salvando os dados do usuário e as informações de estado necessárias após uma reinicialização. É recomendável que os aplicativos salvem periodicamente os dados e o estado do usuário.

  • O Gerenciador de Reinicialização envia uma notificação de CTRL_C_EVENT para aplicativos de console que devem ser desligados e reiniciados. Quando um aplicativo de console recebe uma notificação de CTRL_C_EVENT , o aplicativo deve executar ações necessárias para se preparar para um desligamento dentro do período de tempo limite especificado. No mínimo, os aplicativos de console devem definir uma função HandlerRoutine para lidar com a notificação de CTRL_C_EVENT e devem salvar todos os dados do usuário e informações de estado que serão necessárias após uma reinicialização. É recomendável que os aplicativos salvem periodicamente os dados e o estado do usuário.

  • Se algum aplicativo não for desligado em resposta às mensagens de desligamento, os instaladores poderão usar a opção RmForceShutdown da função RmShutdown para forçar o desligamento dos aplicativos. Quando o instalador especifica um desligamento forçado, o Gerenciador de Reinicialização tenta desligar os aplicativos corretamente enviando as mensagens de desligamento, mas as forçará a desligar se isso falhar. Aplicativos de GUI e aplicativos de console podem ser forçados a desligar para habilitar a instalação de uma atualização de segurança crítica. Como isso pode resultar em perda de dados, os aplicativos devem lidar com as mensagens de desligamento e desligar corretamente quando necessário.

  • Os aplicativos devem se registrar para uma reinicialização usando a função RegisterApplicationRestart . O Gerenciador de Reinicialização só pode reiniciar os aplicativos que foram registrados para reinicialização. Essa é a única maneira que o Gerenciador de Reinicialização pode determinar o comando de linha de comando a ser usado ao reiniciar o aplicativo. Se o aplicativo precisar reabrir com algum estado ou dados salvos, essas informações deverão ser incluídas no comando de linha de comando registrado para o aplicativo.

    Observação

    Se o aplicativo reiniciado precisar ser executado no mesmo diretório em que foi executado antes de ser desligado, o aplicativo deverá salvar as informações do diretório e, em seguida, alterar para o diretório após a reinicialização.

     

    Observação

    A função RmRestart não reinicia aplicativos que não são executados como o usuário conectado no momento. Por exemplo, a função RmRestart não reinicia os aplicativos iniciados com o comando Executar como que não é executado como o usuário conectado no momento. Esses aplicativos devem ser reiniciados manualmente.

     

  • Quando o Gerenciador de Reinicialização determina que uma reinicialização do sistema é necessária para instalar uma atualização, ele não desliga nenhum aplicativo e serviço. Em vez disso, ele deixa isso para o instalador decidir quando agendar uma reinicialização do sistema e instalar a atualização. Os instaladores podem reduzir a interrupção para os usuários causadas por atualizações que exigem uma reinicialização do sistema usando a função ExitWindowsEx com o sinalizador EWX_RESTARTAPPS ou a função InitiateShutdown com o sinalizador SHUTDOWN_RESTARTAPPS . O uso desses sinalizadores garante que os aplicativos registrados para reinicialização sejam reiniciados após uma reinicialização do sistema, o que minimiza o impacto sobre o usuário.