Compartilhar via


Função RmShutdown (restartmanager.h)

Inicia o desligamento de aplicativos. Essa função só pode ser chamada do instalador que iniciou a sessão do Restart Manager usando a função RmStartSession .

Sintaxe

DWORD RmShutdown(
  [in]           DWORD                    dwSessionHandle,
  [in]           ULONG                    lActionFlags,
  [in, optional] RM_WRITE_STATUS_CALLBACK fnStatus
);

Parâmetros

[in] dwSessionHandle

Um identificador para uma sessão existente do Gerenciador de Reinicialização.

[in] lActionFlags

Uma ou mais opções de RM_SHUTDOWN_TYPE que configuram o desligamento de componentes. Os valores a seguir podem ser combinados por um operador OR para especificar que aplicativos e serviços sem resposta devem ser forçados a desligar se, e somente se, todos os aplicativos tiverem sido registrados para reinicialização.

Valor Significado
RmForceShutdown
0x1
Force aplicativos e serviços sem resposta a serem desligados após o período de tempo limite. Um aplicativo que não responde a uma solicitação de desligamento é forçado a ser desligado dentro de 30 segundos. Um serviço que não responde a uma solicitação de desligamento é forçado a ser desligado após 20 segundos.
RmShutdownOnlyRegistered
0x10
Desligue os aplicativos se e somente se todos os aplicativos tiverem sido registrados para reinicialização usando a função RegisterApplicationRestart . Se nenhum processo ou serviço não puder ser reiniciado, nenhum processo ou serviço será desligado.

[in, optional] fnStatus

Um ponteiro para uma função RM_WRITE_STATUS_CALLBACK que é usada para comunicar status detalhadas enquanto essa função está em execução. Se FOR NULL, nenhuma status será fornecida.

Retornar valor

Esse é o erro mais recente recebido. A função pode retornar um dos códigos de erro do sistema definidos em Winerror.h.

Valor Significado
ERROR_SUCCESS
0
Todas as operações de desligamento, reinicialização e retorno de chamada foram concluídas com êxito.
ERROR_FAIL_NOACTION_REBOOT
350
Nenhuma ação de desligamento foi executada. Um ou mais processos ou serviços exigem que uma reinicialização do sistema seja desligada. Esse código de erro é retornado quando o Gerenciador de Reinicialização detecta que uma reinicialização do sistema é necessária antes de desligar qualquer aplicativo.
ERROR_FAIL_SHUTDOWN
351
Alguns aplicativos não puderam ser desligados. O AppStatus das estruturas RM_PROCESS_INFO retornadas pela função RmGetList contêm informações de status atualizadas.
ERROR_CANCELLED
1223
Esse valor de erro é retornado pela função RmShutdown quando a solicitação para cancelar uma operação é bem-sucedida.
ERROR_SEM_TIMEOUT
121
Uma função do Gerenciador de Reinicialização não pôde obter um mutex de gravação do Registro no tempo alocado. Uma reinicialização do sistema é recomendada porque o uso adicional do Gerenciador de Reinicialização provavelmente falhará.
ERROR_BAD_ARGUMENTS
160
Um ou mais argumentos não estão corretos. Esse valor de erro será retornado pela função Gerenciador de Reinicialização se um ponteiro NULL ou 0 for passado em um parâmetro que exija um valor não nulo e não zero.
ERROR_WRITE_FAULT
29
Uma operação não pôde ler ou gravar no registro.
ERROR_OUTOFMEMORY
14
Não foi possível concluir uma operação do Gerenciador de Reinicialização porque não há memória suficiente disponível.
ERROR_INVALID_HANDLE
6
Não existe nenhuma sessão do Gerenciador de Reinicialização para o identificador fornecido.

Comentários

A função RmShutdown chama RmGetList e atualiza a lista de processos atualmente usando recursos registrados antes de tentar desligar todos os processos. A função RmShutdown tenta desligar os processos usando recursos registrados na lista mais atual. A função RmShutdown atualiza o membro AppStatus das estruturas RM_PROCESS_INFO retornadas pela função RmGetList com informações detalhadas de status.

O Gerenciador de Reinicialização respeita os privilégios que separam diferentes sessões de usuário ou terminal. Um instalador em execução como um serviço com privilégios localSystem não pode desligar nem reiniciar nenhum aplicativo em outra sessão de usuário ou terminal. Os instaladores devem implementar métodos personalizados para desligar e reiniciar aplicativos que estão em execução em outras sessões. Um método seria iniciar um novo processo de instalador na outra sessão para executar operações de desligamento e reinicialização.

Os instaladores sempre devem reiniciar aplicativos e serviços usando a função RmRestart mesmo quando a função RmShutdown retorna um erro indicando que nem todos os aplicativos e serviços podem ser desligados.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho restartmanager.h
Biblioteca Rstrtmgr.lib
DLL Rstrtmgr.dll

Confira também

RegisterApplicationRestart

RmCancelCurrentTask

RmRestart