Pergunta

Para abrir o diálogo de UAC no Vista, ao escrever para o ramo de registo HKLM, optamos por não utilizar a API Win32 Registry, como quando permissões Vista estão faltando, tínhamos necessidade de relançar toda a nossa aplicação com direitos de administrador. Em vez disso, fazer este truque:

ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);

Esta solução funciona bem, além de que a nossa aplicação é um 32-bit um, e executa o comando REG.EXE como seria um aplicativo de 32 bits usando a camada de compatibilidade WOW! :( Se REG.EXE é executado a partir da linha de comando, é adequadamente correu no modo de 64 bits. Isto é importante, porque se é funcionou como um aplicativo de 32 bits, as chaves do Registro vai acabar no lugar errado devido a registro reflexão .

Então, há alguma maneira de lançar um aplicativo de 64 bits por meio de programação a partir de um aplicativo de 32 bits e não executá-lo usando o subsistema WOW64 como o seu processo de 32 bits pai (ou seja, um "*" sufixo no Gerenciador de Tarefas) ?

Foi útil?

Solução

tentar isso (a partir de um processo de 32 bits):

> %WINDIR%\sysnative\reg.exe query ...

(descobriu que aqui ).

Outras dicas

programa

Se um nativo de 32 bits ou 64 bits (não gerenciado) é de gerência depende unicamente do executável. Existem duas cópias de reg.exe, em C: \ Windows \ System32 (64 bits) e C: \ Windows \ SysWoW64 (32 bits). Porque você não especificar um caminho, você está recebendo tudo o que aparece pela primeira vez na variável de ambiente PATH, que é a versão de 32 bits para um processo de 32 bits.

Você realmente deve levar esta função para fora em um programa ou COM objeto separado, e marcar o programa com um manifesto, ou lançar o objeto COM usando o COM elevação apelido .

Você já pensou em criar um pequeno aplicativo "helper" para fazer a atualização do registro para você? Se você compilá-lo para 64 bits e incluem um manifesto que indica que ele requer direitos de administrador, então ele vai cobrir ambas as bases para você.

Existem API de detectar a "bitness" do OS você está rodando em que você poderia, de modo concebível, compilar ambos RegistryUpdate32.exe e RegistryUpdate64.exe e chamar a uma relevante.

Uma coisa que eu fiz como uma solução para mim é PInvoke redirecionamento incapacitante:

http: // MSDN .microsoft.com / en-us / library / janelas / desktop / aa365744 (v = VS.85) .aspx

Você sempre pode transformá-lo de volta em.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top