Я запускаю Outlook 2010 на виртуальной машине под управлением Windows 7. Сеть предоставляется через хост. Outlook подключается к серверу Exchange.

При изменении IP-адреса хоста (например, при переходе в другую сеть Wi-Fi) это нарушает возможности Outlook. Я не исследовал в глубине, но, кажется, упорно сохраняет соединение TCP и не начать новую. В строке состояния внизу продолжает отображаться сообщение «Эта папка последний раз обновлялась в <время>», и новые электронные письма не загружаются.

Нажатие кнопок «Обновить папку» или «Отправить / получить все папки» не помогает. Переключение в автономный режим (кнопка «Работа в автономном режиме») и возврат в онлайн не помогает.

Иногда, в конце концов, Outlooks переподключается. Но это занимает минуты или часы. Как я могу дать команду Outlook подключиться сейчас?

Убить Outlook и перезапустить его работает, но это разрушительно. Эта проблема связана с запуском Outlook в виртуальной машине или, по-видимому, за шлюзом, чей IP-адрес изменяется: если меняется IP-адрес самой машины Windows, Outlook правильно восстанавливает соединение.

2 ответа2

1

Я не смог найти способ убедить Outlook повторно подключиться к серверу, если не считать его перезапуска или отключения и (болезненно) повторного включения сетевого интерфейса.

Поэтому я отключаю и снова подключаю виртуальный кабель между виртуальной машиной и хостом с помощью следующего сценария VBoxCableReconnect . Конечно, скрипт специфичен для VirtualBox, но я ожидаю, что подобные вещи возможны с другими технологиями виртуальных машин.

#! /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');

Запустите это как пользователь, запустивший виртуальную машину, при запуске сетевого интерфейса на хосте.

0

Контролируйте и щелкните правой кнопкой мыши значок внешнего вида по часам, и у вас появится новый пункт меню «Состояние соединения», в котором вы сможете подключиться гораздо быстрее, чем любой другой метод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .