Проверка среды LAN и отмена проверки

Я обновляю программу VBA (excel). При запуске программа проверяет, может ли она найти каталог на файловом сервере офиса, используя:

FileSystemObject.FolderExists("\\servername\path")

Если этого не происходит, программа переключается в автономный режим и сохраняет вывод на локальный жесткий диск (для последующей передачи), а не непосредственно на файловый сервер.

Это работает нормально, это очень быстро, если компьютер может достичь пути, однако иногда может потребоваться некоторое время (до одной минуты) для завершения / тайм-аута вызова FolderExists, особенно если сетевое соединение открыто, но требуемый путь не существует (т.е. мы подключены к какой-то другой локальной сети).

Мои вопросы):

  1. есть ли более быстрый / лучший способ проверить наличие сетевого пути с помощью VBA?

  2. есть ли способ заставить пользователя отменить поиск, выполняемый FolderExists (), когда он знает, что это не может быть успешным, потому что он не находится в офисе. Т.е. есть ли способ преждевременно выйти из FolderExists () (или любого другого вызова функции, если на то пошло)

Я хочу, чтобы в решении было как можно меньше пользовательского ввода, поэтому проверка выполняется автоматически, а не просто спрашивать пользователя, находится ли он в офисе или нет.


person Loopo    schedule 30.10.2008    source источник


Ответы (2)


Если вы находитесь в домене:

Проверьте переменную окружения LOGONSERVER.

Если перед именем сервера стоят два символа '\', он подключен к активному каталогу, и вам следует выполнить проверку.

В противном случае он не будет подключен к офисной сети, поэтому вы можете обойти проверку.

Если вы не в домене:

Вероятно, лучше всего запустить эхо-запрос на целевой сервер.

Если он не может получить ответ ping, он либо не подключен к сети, не подключен к ВАШЕЙ сети, либо сервер не работает. В таких случаях вы не хотите, чтобы ваш код выполнялся в любом случае.

MVPS.ORG и На форумах MSDN есть образцы кода для этого. ,

person Kevin Fairchild    schedule 30.10.2008
comment
Проблема в том, что мы не используем активный каталог. Это просто связка ПК и ноутбуков и сервер самбы. 'echo% LOGONSERVER%' возвращает '\\ ‹mycomputerName›' - person Loopo; 30.10.2008
comment
Ах. Хорошо, а что насчет решения ping? Проверка связи с сервером займет секунду или две. Гораздо проще иметь дело, чем с потенциальным временем ожидания, связанным с FolderExists. - person Kevin Fairchild; 30.10.2008
comment
Только что протестировал решение ping, работает как мечта и быстро ... а почему я не подумал об этом? Спасибо, Кевин! - person Loopo; 30.10.2008

Я использую команду Dir, выбирая общую папку на сервере и фиксируя ошибку, если она не обнаружена.

Dir("\\Servername\aFolder\", vbDirectory)
person Rob Gibson    schedule 03.07.2012