October 26th, 2020

Ошибка 0x80004005 при создании проекта

Недавно я сначала обновил свою операционную систему «Windows 7» на «Windows 10», а затем обновил свою среду разработки «Visual Studio Community» с версии 2017 на версию 2019.

После этого я попытался создать новый проект в среде «Visual Studio Community 2019» и получил ошибку «Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))». Англоязычный вариант текста ошибки: «Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))».

Я думаю, эта ошибка в моем случае была связана с тем, что у среды «Visual Studio Community 2019» не было каких-то прав, возможно, связанных с созданием папок или файлов.

В моем случае для решения вышеуказанной проблемы было достаточно запустить среду «Visual Studio Community 2019» от имени администратора. Для этого я открыл меню кнопки «Пуск», нашел ярлык запуска среды «Visual Studio Community 2019», нажал на этот ярлык правой кнопкой мыши и в открывшемся контекстном меню нажал пункт «Дополнительно». Открылось подменю этого пункта и в нем я нажал на пункт «Запуск от имени администратора».

Открылось окно среды «Visual Studio Community 2019». При запуске от имени администратора в правом верхнем углу окна среды появляется надпись «АДМИНИСТРАТОР» (в обычном режиме этой надписи нет). Я создал новый проект в этом режиме, ошибок не возникло. После этого я вышел из программы, удалил папку проекта для чистоты эксперимента и запустил среду «Visual Studio Community 2019» в обычном режиме. Снова создал новый проект, на этот раз всё прошло без ошибок.

Система с разделением времени VS современная ЛВС

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

Альтернативой локальной сети является большая система разделения времени с терминалом для каждого пользователя. Приведите два преимущества клиент-серверной системы, использующей локальную сеть.


Перевод словосочетания «timesharing system» как «система разделения времени», думаю, несколько искажает смысл оригинала. Из перевода можно подумать, что главной целью такой системы (компьютера) является разделение времени. Однако, главной задачей любого компьютера (компьютерной системы) является выполнение вычислений. «Разделение времени» в данном случае — лишь способ сделать использование имеющейся компьютерной системы более эффективным. Правильным переводом должно быть что-то вроде словосочетания «система с разделением времени».

Разберемся подробнее, что тут имеется в виду. Еще до создания сети ARPANET (прародителя современного интернета), в 1950-х и 1960-х годах, компьютеры стоили очень дорого (по нескольку миллионов долларов) и были большими в размерах. Например, небогатый университет с трудом мог позволить себе купить один такой компьютер.

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

Но в то время, пока один человек вводил через терминал команду, компьютер-гигант не выполнял никаких вычислений. Это было очень неэффективное использование настолько дорогой вещи. Чтобы повысить эффективность использования компьютера, придумали систему с разделением времени. Пока человек с одного терминала вводил команду, теперь компьютер выполнял введенные ранее команды с других терминалов. Время центрального процессора разделялось на кусочки — каждый кусочек для отдельного терминала. Поэтому такую систему и назвали «система с разделением времени» (по-английски «timesharing system»). Подробнее:
https://ru.wikipedia.org/wiki/Разделение_времени

Почему Таненбаум сравнивает «большую систему с разделением времени и терминалами» с «клиент-серверной системой, использующей локальную сеть»?

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

В чем отличие такой системы от современной локальной сети? В современной локальной сети организации тоже есть один (или несколько) мощных компьютеров, которые называют серверами. Однако, клиенты (терминалы) в современной сети имеют свои вычислительные мощности, то есть свой центральный процессор. В принципе, в современной локальной сети все узлы, думается, равноправны и любой клиент может быть сервером, а сервер может стать клиентом. На самом деле, клиент — это просто заказчик услуг, а сервер — поставщик услуг. Клиент и сервер — это даже не «железо», а программы. Подробнее:
https://ru.wikipedia.org/wiki/Клиент_—_сервер

Еще одно отличие в том, что в современной локальной сети используется технология «коммутации пакетов» (по-английски «packet switching»). Подробнее:
https://ru.wikipedia.org/wiki/Коммутация_пакетов

Я понимаю обе сущности, но не могу сказать, что одна сущность лучше другой. Большая система с разделением времени и терминалами в своё время была единственным выбором. В то время просто невозможно было создать что-то вроде современной локальной сети, потому что у одной организации с трудом хватало денег на один тогдашний компьютер, а современная сеть предназначена для соединения нескольких компьютеров. Только когда компьютеры уменьшились в размерах и подешевели, стало возможным и создание современной локальной сети.