Qual é a diferença entre runas.exe e “Run as different user”?

3

Estou trabalhando com um aplicativo de linha de negócios que precisa ser executado como um usuário do domínio. Eu tenho um usuário que deseja continuar usando uma conta local (já que nem tudo pode ser migrado para um perfil de usuário de domínio), embora o computador tenha ingressado no domínio, então eu configurei um atalho que inicia um arquivo em lote que usa runas.exe , que solicita ao usuário sua senha de domínio. O arquivo em lote completo é assim:

cd \path\to\app
whoami | findstr /i "domain\"
if errorlevel 1 (
 runas /user:domain\domuser \path\to\app\app.exe
) else (
 app.exe
)

(Essencialmente, ele só faz runas se o usuário não estiver logado como usuário do domínio.) Não estou usando nenhum outro comutador em runas , mas quando eu os tento, /noprofile e /env não parece fazer nada.

Este aplicativo inicia e exibe sua tela inicial depois de colocar uma senha em runas . (Se ele é executado como um usuário local, ele lança uma caixa de diálogo de falha, e isso não está acontecendo aqui.) No entanto, o aplicativo então se comporta mal. A parte bizarra é que funciona bem se eu Shift + clicar com o botão direito do mouse (ou o atalho ou o próprio EXE) e fazer a coisa "Executar como usuário diferente".

Eu não tenho acesso à fonte deste programa, nem tenho liberdade para discutir detalhes dele. Isso é irrelevante, porém - o que é diferente entre lançá-lo com runas e "Executar como usuário diferente"?

Este é o Windows 10 Pro de 64 bits, embora eu também veja esse problema no Windows 8.1 Pro.

    
por Ben N 23.12.2015 / 19:10

1 resposta

2

Após algumas experiências, notei que runas.exe sempre define o diretório de inicialização do programa como System32 , enquanto Executar como usuário diferente define o direcionamento inicial para a pasta que contém o EXE.

Prova

Isso pode ser demonstrado criando um arquivo em lotes que contém algo como:

echo %cd%
pause

Coloque-o em uma pasta acessível a todos os usuários. Se você executá-lo apenas clicando duas vezes no File Explorer, ele mostrará o diretório que o contém. Ele fará o mesmo se você usar Executar como usuário diferente . Se você abrir uma janela Prompt de Comando e executar runas /user:otheruser test.bat , ela falhará ("nenhum arquivo") se test.bat não estiver no outro usuário ou no PATH do sistema. Isso porque runas começa em System32 . Se você fizer runas /user:otheruser \full\path\to\test.bat , ele será iniciado e exibirá o caminho para System32 , porque esse é o seu diretório inicial.

Corrigindo o problema

O programa em questão faz coisas estranhas (mas não trava) se não vir certos arquivos em seu diretório atual / inicial. Atualize o arquivo em lote para usar runas em um arquivo em lote que primeiro cd s no diretório correto e, em seguida, inicie o programa.

    
por 24.12.2015 / 23:58