Orientações para Candidaturas
Os aplicativos executados 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 GUI para desligamento enviando uma notificação de 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 GUI devem ouvir a mensagem WM_QUERYENDSESSION e retornar um valor de TRUE se o aplicativo estiver preparado para desligar e reiniciar. Se nenhum aplicativo retornar um valor de 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 GUI que não são desligados ao receber WM_ENDSESSION. Se qualquer aplicativo GUI responder a uma mensagem WM_QUERYENDSESSION retornando um valor de FALSE, o desligamento será cancelado. No entanto, se o desligamento for forçado, o aplicativo será encerrado independentemente disso.
Quando um aplicativo GUI recebe uma mensagem 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 todos os dados do usuário e informações de estado necessárias após uma reinicialização. Recomenda-se 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 tomar as 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. Recomenda-se que os aplicativos salvem periodicamente os dados e o estado do usuário.
Se algum aplicativo não desligar em resposta às mensagens de desligamento, os instaladores podem 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 de forma limpa enviando as mensagens de desligamento, mas os forçará a fechar se isso falhar. As aplicações GUI e as aplicações de consola podem ser forçadas a encerrar para permitir 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çãoRegisterApplicationRestart. O Restart Manager só pode reiniciar 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 deve ser executado no mesmo diretório em que foi executado antes de ser desligado, o aplicativo deve salvar as informações do diretório e, em seguida, mudar 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 aplicativos iniciados com o comando Run As que não são executados 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 causada por atualizações que exigem uma reinicialização do sistema usando a funçãoExitWindowsExcom o sinalizador EWX_RESTARTAPPS ou a funçãoInitiateShutdown com o sinalizador SHUTDOWN_RESTARTAPPS. O uso desses sinalizadores garante que os aplicativos registrados para reinicialização sejam reiniciados após a reinicialização do sistema, o que minimiza o impacto sobre o usuário.