O notificador de desligamento / reinicialização do Windows oferece a opção de atraso, semelhante à Atualização Automática

3

Eu tenho um programa do windows implantado usando o WPKG que é executado escondido para o usuário, e pode ser necessário reiniciar algumas vezes. Para evitar que o usuário perca o trabalho, eu gostaria de uma caixa de diálogo com uma mensagem, dando ao usuário logado a opção de atrasar um pouco o desligamento. Isso é algo parecido com o modo como a Atualização Automática faz isso.

Eu olhei para uma infinidade de utilitários de desligamento que dão ao usuário uma mensagem, mas nenhum que lhes dê um pouco de controle para atrasar o desligamento.

    
por menko 08.10.2009 / 03:15

2 respostas

4

Uma opção rápida e suja seria usar PSSHUTDOWN no pacote PSTOOLS de Sysinternals da Microsofts .

Um dos switches disponíveis é -c . Permite ao usuário parar a reinicialização pressionando o botão Cancelar .

-c Allows the shutdown to be aborted by the interactive user.

Você pode definir isso para fazer um loop a cada X minutos até que o usuário esteja pronto para ter sua máquina reinicializada.

Uma maneira de fazer isso seria escrever seu próprio VBscript. Isso poderia fornecer uma caixa de diálogo elegante oferecendo, por exemplo, Sim e Não . Se clicassem em Não, ele duraria por X minutos antes de perguntar novamente. Isso seria muito fácil de escrever.

Edit: Bem, eu estava entediado, então eu fiz o roteiro para você. Aproveite.

option explicit
on error resume next

Dim strComputer, intRebootChoice
Dim objWMIService, objOperatingSystem
Dim colOperatingSystems 

strComputer = "."

do while 1>0
 intRebootChoice = msgbox("OI, you, need to reboot.  Choose No to be asked again 1 hour",308,"Reboot incoming")
 select case intRebootChoice
  case 6
   Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\" & strComputer & "\root\cimv2")
   Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
   For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Reboot(1)
   Next
  case 7
   wscript.sleep(3600000)
  case else
   'shenanigans'
 end select
loop
    
por 08.10.2009 / 04:32
2

o utilitário C: \ WINDOWS \ system32 \ shutdown.exe parece fazer o trabalho para mim.]

tente o seguinte: shutdown -r -t 500 -c "mensagem do usuário feliz"

EDITAR: A mensagem de reinicialização de atualizações automáticas é mais uma tela de propaganda com um tempo limite que tem um botão de reinicialização. Fácil o suficiente para duplicar o código para isso, embora você possa precisar perguntar isso em stackoverflow:)

    
por 08.10.2009 / 03:27

Tags