Ok, eu descobri uma maneira de fazer isso sem muito muito incômodo ou expondo uma senha em claro .
Primeiro, você precisa ativar a conta de administrador. Essa é a parte mais inconveniente. Configurei minha conta normal para login automático, mas é irritante que a conta de administrador esteja disponível na tela de login, mesmo que eu nunca a veja. Alguns podem reclamar que, ao expor a conta do administrador, isso torna o sistema um pouco menos seguro, mas como você deve definir uma senha para a conta para usá-la na linha de comando, essa preocupação é irrelevante.
O método que escolhi requer o uso de algum tipo de programa SHELLEXECUTE que suporte programas em execução minimizados. (Pode-se usar o comando START embutido no interpretador de comandos CMD, mas isso faria com que uma janela de prompt de comando piscasse, enquanto um programa sem console sem janelas evitaria isso.) Há muito por onde escolher, mas eu usei um que Eu escrevi de volta quando.
Agora, basta criar uma entrada de registro na chave RUN que chama o ShellExecute, especificando a opção minimizar e usando RUNAS como o programa a ser executado. (Existem outros programas que podem rodar um programa usando uma conta diferente, se você preferir, mas o RUNAS vem com o Windows e pode salvar a senha para evitar incluí-la na linha de comando). Alternativamente, você pode criar um atalho normal do Windows e mover-se. para a pasta Startup .
Por fim, você precisará passar o programa (e quaisquer argumentos para ele) como um argumento para o RUNAS.
(Não se esqueça de executar o programa alvo - ou qualquer programa para esse assunto - com RUNAS, especificando a opção / SAVECRED, pelo menos uma vez sem executá-lo minimizado para salvar a senha .)
A linha de comando a ser usada pode ficar bastante complexa, porque é um programa que chama um programa chamando um programa. Piorá se você precisar especificar argumentos para o programa de destino e, pior ainda, se precisar incluir espaços. A situação das aspas pode rapidamente tornar-se enlouquecedora, pelo que será necessário muita experimentação.
Por exemplo, se você usar ShelExec da PJ Naughter e quiser executar o SpeedFan, use uma linha de comando assim:
shelexec /showcmd:sw_hide /EXE runas "/params:/user:administrator /savecred ""C:\Program Files\SpeedFan\speedfan.exe"""
Devo salientar que configurei as opções do SpeedFan para começar minimizadas, caso contrário, em vez de executar o speedfan "diretamente", precisaria executar um segundo programa ShellExecute com sua opção minimize para executar o SpeedFan (um programa chamando um programa chamando um programa chamando um programa). Conseguir isso para o trabalho quase certamente levaria até mesmo o mais completo administrador de computadores a enlouquecer.
Pode ser um pouco trabalhoso fazer com que a linha de comando funcione, mas parece funcionar bem para qualquer tarefa em segundo plano de execução automática que exija acesso administrativo. O melhor de tudo, ele funciona para contas de usuário padrão / limitadas, então você pode usar este método para ter programas auto-executados com privilégios elevados, sem dar um prompt UAC para usuários regulares.
(Embora funcione bem, ele tem seus aspectos negativos, principalmente porque ele roda os programas indiretamente, gerentes de execução automática como Autoruns, StartupDelayer, HijackThis etc. não poderão detectar qual programa real está sendo executado automaticamente - eles ainda funcionarão e poderão desativar / excluir / etc., mas não mostrarão o ícone correto ou informações sobre recursos de arquivos.)