Karan está certo: não há garantia de que a tarefa será capaz de executar em sua totalidade. Testei o método de Diretiva de Grupo em minha própria máquina, mas com um SSD, um CPU respeitável e memória de 12GB, o pequeno reprodutor de áudio que eu estava tentando executar nunca teve a chance de iniciar!
A solução complicada - se existir - significaria ligar-se ao processo de desligamento e suspendê-lo temporariamente de uma forma ou de outra, para dar tempo ao seu arquivo de áudio para carregar antes de continuar com o procedimento.
Uma solução com menos overkill (apropriatelykill?) significaria escrever um lote ou arquivo de script que inicie seu arquivo de áudio, possivelmente com um timer configurado para corresponder ao comprimento do arquivo de áudio (mais um pouco para o programa player de áudio carregar na memória), ou alguma outra maneira de determinar que o processo de áudio foi concluído e, em seguida, disparar o processo de desligamento. Em seguida, você executaria esse lote ou arquivo de script em vez da execução do desligamento pelos seus meios usuais (como por meio do menu Iniciar).
Para sua sorte, aproveitei para escrever esse roteiro. Salve isso em um editor de texto e dê a ele uma extensão ".vbs". Atribua um atalho a ele e coloque-o no menu Iniciar ou na área de trabalho e configure-o com um ícone apropriado. (Nota: Eu estava com um humor peculiar quando nomeei minhas variáveis e funções, mas funciona.)
Option Explicit
Dim dudeWeNeedAWindow, beMyWordsYo, whatTheCrapDoWeCallIt, thereOnceWasADefaultNamedOne, imAChooseStuffIsThatAlright, imJustGoingToTellYouRightNowThatWasALowBall, dontMockMeIWasFeatherDustedAsAChild, thisIsWhereThePartyHappensSucka, thisCrapNeedsToShutItselfDown, bringItHonkyIllJustStartAllOverAgain, imSorryButYouNeedToSettleDownAndHibernateRightNow
beMyWordsYo = "How would you like to proceed?" & vbcr & vbcr & _
"1) Shutdown" & vbcr & _
"2) Restart" & vbcr & _
"3) Hibernate"
dontMockMeIWasFeatherDustedAsAChild = "Nonsense! What are you trying to pull?"
thisIsWhereThePartyHappensSucka = """C:\Program Files\MPC-HC\mpc-hc64.exe"" %USERPROFILE%\Music\Vermillion.mp3"
whatTheCrapDoWeCallIt = "Shutdown"
thereOnceWasADefaultNamedOne = "1"
thisCrapNeedsToShutItselfDown = """shutdown.exe"" /s /t 00"
bringItHonkyIllJustStartAllOverAgain = """shutdown.exe"" /r /t 00"
imSorryButYouNeedToSettleDownAndHibernateRightNow = """shutdown.exe"" /h"
Sub ShutdownThisGoober
imAChooseStuffIsThatAlright = InputBox(beMyWordsYo,whatTheCrapDoWeCallIt,thereOnceWasADefaultNamedOne)
Set dudeWeNeedAWindow = WScript.CreateObject("WScript.Shell")
If imAChooseStuffIsThatAlright = "1" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(thisCrapNeedsToShutItselfDown)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "2" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(bringItHonkyIllJustStartAllOverAgain)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "3" Then
dudeWeNeedAWindow.Run(thisIsWhereThePartyHappensSucka)
dudeWeNeedAWindow.Run(imSorryButYouNeedToSettleDownAndHibernateRightNow)
WScript.Quit
ElseIf imAChooseStuffIsThatAlright = "0" Or imAChooseStuffIsThatAlright = "" Then
WScript.Quit
Else
imJustGoingToTellYouRightNowThatWasALowBall = MsgBox(dontMockMeIWasFeatherDustedAsAChild,16)
Set dudeWeNeedAWindow = Nothing
ShutdownThisGoober
End If
Set dudeWeNeedAWindow = Nothing
End Sub
ShutdownThisGoober