Work Around para usar o Psexec no Windows Server 2003 de 64 bits

1

SO local: Windows Server 2003 SO remoto: Windows Server 2003 de 64 bits

Eu tenho um servidor de gerenciamento (32 bits) que tem muitos scripts de lote agendados em execução. Um dos scripts é usar psexec para iniciar processo no host remoto (64 bits).

Meu script simplesmente faz abaixo. No entanto, ele retornará "The handle is invalid" .

C:\psexec.exe \%HOST% -i 1 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

Look up online descobriu que o RDP para a sessão 1 e o psexec para a sessão 1 podem ter diferentes ambientes e diferentes recursos disponíveis do sistema (handles). Então é por isso que meu script psexec não funciona.

No entanto, o psexec em execução na sessão de console no script funciona.

C:\psexec.exe \%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

Algumas pessoas dizem que executar o psexec no WoW64 ou permitir que o psexec inicie o aplicativo no WoW64 pode ser uma solução para as máquinas de 64 bits. Eu estou supondo psexec na sessão de console faz semelhante. Alguém pode confirmar?

Minha pergunta: meu aplicativo tem GUI, então ainda preciso executá-lo na sessão do usuário. Há alguma maneira de fazer isso? Por favor, informe, obrigado.

    
por Stan 16.02.2011 / 01:17

2 respostas

3

Você pode conseguir executar no modo interativo usando o comando abaixo:

C:\psexec.exe \%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% cmd /c MyApplication.exe 

Acima funciona, se você não quiser capturar o código de saída do aplicativo iniciado.

    
por 03.09.2012 / 06:48
1

Look up online found that RDP to session 1 and psexec to session 1 may have different environment and different available system resources (handles). So that's probably why my psexec script doesn't work.

Não, isso não faz sentido. Embora seja verdade que algumas alças podem ser compartilhadas (herdadas, na verdade) entre processos, não faz sentido algum fora do escopo da programação.

There are some people say run psexec under WoW64 or let psexec launch the application under WoW64 can be a work-around on 64-bit machines. I am guessing psexec on console session does similar. Can anyone confirm?

WoW64 significa "Windows no Windows 64". Basicamente, é o ambiente de 32 bits dentro de um sistema operacional Windows 64. Cada executável do win32 estará rodando "sob" o WoW64: não há outra maneira de executar porque eles não podem usar a versão de 64 bits das funções do SO: eles precisam passar pela camada de tradução fornecida pelo WoW64.

My question: my application has GUI, so I still need it running in user session. Is there any way to do this? Please advise, thanks.

Essa é provavelmente a razão pela qual seu aplicativo está falhando (não PSexec, mas seu aplicativo): ele está tentando obter um identificador para uma janela e, como não está sendo executado em um ambiente interativo, essa chamada falha (suponho está tentando pegar um identificador para o explorador ou algo assim).

(ao lado disso, tente adicionar a opção -i como Rupasri Somavarapu sugeriu: deve funcionar)

    
por 03.09.2012 / 08:56