Вам необходимо обновлять свой токен авторизации каждые 12 часов, попробуйте:
$(aws ecr get-login --no-include-email --region us-east-1)
- изменить регион в соответствии с вашей конфигурацией
Вы можете использовать IsNetworkAlive (). Хотя технически он не проверяет состояние соединения, он, вероятно, лучше, поскольку он также может обнаруживать беспроводное и коммутируемое соединение. Вот пример:
using System.Runtime.InteropServices;
class Program
{
[DllImport("sensapi.dll")]
static extern bool IsNetworkAlive(out int flags);
static void Main(string[] args)
{
int flags;
bool connected = IsNetworkAlive(out flags);
}
}
Параметр flags возвращает, подключено ли соединение к Интернету или только к локальной сети. Я не уверен на 100%, откуда он знает, но готов поспорить, он просто проверяет, установлен ли шлюз по умолчанию.
По моему скромному мнению, нет точного способа отличить отключенную сеть от отключенного кабеля. И даже если есть способ, есть и способ его обойти.
Предположим, у вас есть решение, и давайте рассмотрим некоторые ситуации:
Некоторые сетевые драйверы могут обнаружить это. Однако вам потребуется использовать неуправляемый код для доступа к ним из C # (что может быть очень сложно / невозможно), и решение может быть ненадежным для всех сетевых адаптеров.
Сетевая карта сообщит об этом как о состоянии. Такие инструменты, как ethtool
, могут отображать это ( Link up
), но это доступно только для Linux / Unix.
Если вы можете перечислить установленные сетевые карты с помощью Windows API, я Я уверен, что где-то там вы найдете флаг для "соединения".
Если бы я действительно хотел использовать ваше приложение и будет ли оно работать, зависит от чего-то вроде этого, я всегда смогу найти способ обмануть ваше приложение. Вы уверены, что нет лучшего решения?
Как насчет проверки связи шлюза по умолчанию?
Здесь есть код , который получает шлюз по умолчанию из реестра.