Eu executo o Outlook 2010 em uma máquina virtual executando o Windows 7. A rede é fornecida por meio do host. O Outlook se conecta a um servidor Exchange.
Quando o endereço IP do host muda (por exemplo, mudando para uma rede wifi diferente), isso interrompe a conectividade do Outlook. Não investiguei a fundo, mas parece manter teimosamente uma conexão TCP e não iniciar uma nova. A barra de status na parte inferior continua exibindo “Esta pasta foi atualizada pela última vez às <hora>” e novos e-mails não são baixados.
Pressionar os botões “Atualizar pasta” ou “Enviar/receber todas as pastas” não ajuda. Mudar para o modo offline (botão “Trabalhar Offline”) e voltar a ficar online não ajuda.
Às vezes, eventualmente, o Outlook se reconecta. Mas isso leva minutos ou horas.Como posso instruir o Outlook a se reconectar agora?
Matar o Outlook e reiniciá-lo funciona, mas é perturbador. Esse problema é específico da execução do Outlook em uma VM ou, presumivelmente, atrás de um gateway cujo endereço IP muda: se o endereço IP da própria máquina Windows mudar, o Outlook se reconectará corretamente.
Responder1
Não consegui encontrar uma maneira de convencer o Outlook a se reconectar ao servidor, exceto reiniciá-lo ou desabilitar e (dolorosamente) reativar a interface de rede.
Então, o que faço é desconectar e reconectar o cabo virtual entre a VM e o host com o seguinte VBoxCableReconnect
script. É claro que o script é específico do VirtualBox, mas espero que coisas semelhantes sejam possíveis com outras tecnologias de VM.
#! /usr/bin/env perl
use strict;
use warnings;
sub vbox_list {
my %vms;
my ($running) = @_;
my $what = $running ? 'runningvms' : 'vms';
local $ENV{LC_ALL} = 'C';
open VBOX, "VBoxManage list -l $what |" or die 'VBoxManage: $!';
local $/ = "\n\n\n";
while (my $section = <VBOX>) {
my %vm = ();
$section =~ s/\n\n.*//s; # strip shared folders, etc.
foreach my $line (split /\n/, $section) {
$line =~ s/\A([^:]+):\s+// or next;
$vm{$1} = $line;
}
$vms{$vm{UUID}} = {%vm};
}
close VBOX;
return %vms;
}
sub vbox_list_cables {
my ($vms) = @_;
my @cables;
foreach my $vm (values %$vms) {
my %vm = %$vm;
foreach my $key (keys %vm) {
next unless $key =~ /\ANIC *([0-9]+)\z/;
my $num = $1;
if ($vm{$key} =~ /(^|, )Cable connected: on($|, )/) {
push @cables, [$vm{UUID}, $vm{Name}, $num];
}
}
}
return @cables;
}
sub vbox_iterate_cableconnected {
my ($cables, $onoff) = @_;
foreach my $cable (@$cables) {
my ($uuid, $name, $num) = @$cable;
system 'VBoxManage', 'controlvm', $uuid, "setlinkstate$num", $onoff;
# TODO: report errors
}
}
my %vms = vbox_list(1);
my @cables = vbox_list_cables(\%vms);
vbox_iterate_cableconnected(\@cables, 'off');
sleep(1);
vbox_iterate_cableconnected(\@cables, 'on');
Execute-o como o usuário que executa a VM ao abrir uma interface de rede no host.
Responder2
Controle e clique com o botão direito no ícone do Outlook ao lado do relógio e você terá um novo item de menu chamado ‘Status da conexão’, onde poderá se reconectar muito mais rápido do que qualquer outro método.