Estou tentando controlar o Windows Update a partir do menu de contexto do botão direito. Eu tenho chaves de registro que adicionam e/ou removem valores no registro que realizam isso. Eu posso executar com sucesso um único comando.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\Windows Update]
"SubCommands"="Pause updates;Resume updates;Show or hide updates;Open Windows update"
"icon"="wuapi.dll,-0"
"Position"="Bottom"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Pause updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Pause updates\command]
@="reg import pausewu.reg"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Resume updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Resume updates\command]
@="reg import resumewu.reg"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Show or hide updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Show or hide updates\command]
@="cmd /c wushowhide.diagcab"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Open Windows update]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Open Windows update\command]
@="cmd /c start ms-settings:windowsupdate"
Preciso executar dois comandos ao mesmo tempo, mas quando adiciono um segundo comando, nenhum dos comandos será executado.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\Windows Update]
"SubCommands"="Pause updates;Resume updates;Show or hide updates;Open Windows update"
"icon"="wuapi.dll,-0"
"Position"="Bottom"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Pause updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Pause updates\command]
@="reg import pausewu.reg" && echo "cmd /c start ms-settings:windowsupdate"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Resume updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Resume updates\command]
@="reg import resumewu.reg" && echo "cmd /c start ms-settings:windowsupdate"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Show or hide updates]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Show or hide updates\command]
@="reg import resumewu.reg" && echo "cmd /c wushowhide.diagcab"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Open Windows update]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Open Windows update\command]
@="cmd /c start ms-settings:windowsupdate"
Isso é tecnicamente possível, mas provavelmente não é a melhor maneira de fazer isso.
Quão
Para executar vários comandos, eles precisam ser comandos de "linha única". A sequência de comandos deve poder ser executada em uma linha no prompt de comando. Isso significa que eles precisam estar entre aspas (
"
) após@=
.Uma boa maneira de testar isso é copiando tudo entre
"
e colando na caixa de diálogo Executar.Isso vai funcionar:
Nota: Quaisquer aspas ou barras invertidas usadas em comandos precisarão ser escapadas (
\"
,\\
).Uma maneira melhor
Uma alternativa melhor é criar arquivos em lote e executá-los. Crie um arquivo (ex:
pause.bat
) contendo seus comandos:Em seguida, use o seguinte em seu
.reg
arquivo:Nota: Novamente, quaisquer aspas ou barras invertidas usadas em comandos precisarão ser escapadas (
\"
,\\
).Por que isso é melhor
Essa abordagem é melhor por vários motivos:
.reg
arquivo uma vez e pode fazer modificações em seus arquivos de lote como achar melhor. Quanto menos você editar o registro manualmente, melhor.Vou executar 2 comandos do registro. É muito mais simples e deve ser seguro o suficiente para não quebrar o Registro. Também adicionei NSudo.exe à equação para ocultar a janela de comando.