Que diferença as aspas duplas fazem nas chaves de registro?

4

Acabei de criar um item de menu de contexto "Abrir o PowerShell aqui" adicionando as chaves "shell", "powershell" e "command" ao local apropriado no registro do Windows. O valor padrão de "comando" era o caminho para o meu powershell.exe pelo uso da barra invertida como um caractere de escape, em vez de colocar o caminho inteiro entre aspas duplas.

Isso resultou em janelas cmd sendo abertas com o PowerShell executado, ou seja, a janela era pequena, preta e de outra forma formatada pelo estilo padrão do Prompt de Comando.
Quando eu mudei o caminho para não ter barras invertidas como caracteres de escape, mas ao invés disso coloquei o caminho inteiro entre aspas duplas, sem fazer nenhuma outra alteração, o que nunca, uma janela normal, maior, azul do powershell aberta. p>

Eu estou querendo saber que mudança as citações dobro trazem ao registro? Como eles alteram a execução neste caso e por quê?

As chaves em questão são: C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
e "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe"

A primeira chave abrirá uma janela padrão do Prompt de Comando preta com o PowerShell iniciado, enquanto a segunda abre a conhecida janela azul do "PowerShell".

Observe que a chave para iniciar o Powershell em uma pasta específica possui argumentos no final, que são propositadamente omitidos aqui, pois são essas as chaves com as quais testei e que fornecem resultados diferentes.

    
por mathgenius 13.11.2015 / 16:36

1 resposta

2

Você não está escapando de nada no primeiro cenário; o novo processo é criado com uma linha de comando completa de C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe , exatamente como você o coloca. (Verificado com o Process Explorer.)

O Windows armazena as informações de estilo do console - cores, fonte, tamanho da janela - em HKCU\Console . Quando um programa em modo de console (ou seja, um que produz seu próprio conhost.exe instance) é executado, o Windows verifica uma subchave de Console nomeou o caminho completo do EXE do programa, com variáveis de ambiente no caminho recolhido (consulte a nota) e com \ substituído por _ . (Se isso falhar, o Windows verificará uma subchave denominada sem a substituição \ , mas o Editor do Registro não permitirá incluir \ em um nome de chave. Verificado com o Process Monitor.)

Nota: "Recolhimento" (em relação às variáveis de ambiente) é apenas a minha palavra para o oposto de "expandir". A expansão é o processo de substituição de variáveis de ambiente, como %SystemRoot% , por seus valores (por exemplo, C:\Windows , neste caso). Parece que o Windows recolhe os valores em variáveis de ambiente quando possível antes de consultar a chave do console, portanto, C:\Windows é substituído por %SystemRoot% .

Normalmente, o Windows localiza as configurações do PowerShell na subchave chamada %SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe . Mas como o caminho do programa tem barras invertidas extras - o que o Windows perdoa, mas não limpa, pelo menos nesse caso - ele não encontra nenhuma configuração especial do console porque não há uma subchave adequada. Quando defini meu item de menu de contexto para iniciar C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe (anote o último \ dobrado) e renomei a subchave real como %SystemRoot%_System32_WindowsPowerShell_v1.0__powershell.exe (observe o último _ duplicou), a instância do PowerShell iniciada recebeu o estilo.

Além de: as instâncias do PowerShell iniciadas digitando powershell em um prompt de comando existente nunca obtêm os estilos especiais porque estão anexados ao console do pai, que geralmente tem os estilos padrão chatos. Esse fenômeno não está relacionado ao acima.

Outras leituras: boa resposta de Jay Bazuzi, que menciona vários estilos de lugares.

    
por 13.01.2016 / 03:03