Uma abordagem barata e alegre para conseguir isso é através de um diretório compartilhado (que provavelmente terá caminhos diferentes no XP e W7, embora você possa usar uma letra de unidade para o compartilhamento e torná-lo o mesmo em ambos). Você pode simplesmente usar a presença de arquivos de comando e resposta para sincronizar a execução em cada sistema.
No XP você tem um shell de comando rodando constantemente com o loop principal: -
:Loop
sleep 10
if not exist {XPshare}\XPcommand.cmd goto Loop
del {XPshare}\XPresponse.txt
call {XPshare}\XPcommand.cmd > {XPshare}\XPcommand.txt
ren {XPshare}\XPcommand.txt XPresponse.txt
del {XPshare}\XPcommand.cmd
goto Loop
Você pode adicionar o registro em log e refinar o script. Depois do comando call
, você pode adicionar echo {unique string}Completion status = %errorlevel% >> {XPshare}\XPcommand.txt
e pegar na pós-análise.
Sempre que você quiser executar um comando XP a partir do W7, chame um script cmd
com o comando passado em seus parâmetros e contendo: -
del {W7share}\XPresponse.txt
echo %* > {W7share}\XPcommand.cmd
:Loop
sleep 2
if exist {W7share}\XPcommand.cmd goto Loop
Quando você retornar disso, poderá analisar XPresponse.txt
e realizar qualquer pós-processamento. Não é estritamente necessário excluir XPresponse.txt
, mas apenas assegura que nenhuma resposta anterior possa confundir quaisquer verificações W7.
Existem inúmeras versões de sleep.exe
, que são suspensas por alguns segundos, incluindo duas do MS, em Serviços para Unix e no Windows Resource Kit . O número de segundos para escolher é um equilíbrio entre a capacidade de resposta e a sobrecarga de pesquisa. Eu sugeri um intervalo mais curto no W7, porque o polling é feito somente enquanto o comando XP está sendo executado, enquanto no XP ele é feito em todos os outros momentos.