Присоединяясь к новому проекту, разработка и поддержание долгоживущей программы, решил обновить себе ноутбук. Давно хотел приобрести себе что-то такое компактное, легкое, чтоб можно было спокойно взять с собой в кофейню, поработать часик-другой вне офиса.
Выбор пал на ноутбук HP c 14'' экраном, поддерживающим расширение 1920x1080, что и явилось решающим критерием для выбора. Железо вроде хорошее, но вот софт от HP заставляет задумываться, а надо ли оно было.
История
Функционал программы, с которым нужно работать, как я уже сказал, долго живущий, т.е. он пережил много итераций, смен руководителей и разработчиков и представляет из себя такой микс всего правильного, понятного и непонятного со статусом "А зачем это было надо?". В общем, хороший legacy код.
Так вот, одной из особенностью функционала является использование распределённых транзакций. Т.е. на компьютере должен работать сервис MSDTC (он же Distributed Transaction Coordinator, он же Координатор распределённых транзакций) и включены соответствующие настройки.
Вроде всё хорошо. У других участников команды (они не используют HP) проект компилируется, запускается и отрабатываются все сценарии. Работа идёт полным ходом.
Хорошо. Беру свой новенький HP, настраиваю, устанавливаю, скачиваю, компилирую, запускаю, прогоняю сценарии и бац, ошибка:
System.Data.SqlClient.SqlException (0x80131904): MSDTC on server 'MALS-K9CA69NU' is unavailable.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
at System.Data.SqlClient.TdsParser.GetDTCAddress(Int32 timeout, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.GetDTCAddress()
at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)
at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)
at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
at System.Data.ProviderBase.DbConnectionPool.PrepareConnection(DbConnection owningObject, DbConnectionInternal obj, Transaction transaction)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at ...
Хорошо. Всякое бывает. Начинаю копать.
После потраченных часов, удаления антивируса, отключения брандмауэра (он же firewall), использования всех рекомендаций из интернета проблема остается. Ошибка упорно вылезает.
Исследуя очередной пост Error: 8004E00F when trying to access COM+ Applications in Component Services натыкаемся на комментарий, спасибо tsd.
Хорошо. Отключаем сервисы начинающиеся с HP, благо их немного:
Отключение первого же сервиса "HP Analytics service" даёт результат. Просто всё начинает работать. MSDTC отрабатывает нормально, все сценарии проходят успешно.
Так кто ты такой, HP Analytics service? Смотрим полный путь и имя исполняемого файла:
C:\windows\System32\DriverStore\FileRepository\hpanalyticscomp.inf_amd64_19ec9c352a1b5135\x64\TouchpointAnalyticsClientService.exe
В поисковике достаточно набрать Touchpoint Analytics Client
, чтоб начитаться всего хорошего про эту программу и как её упорно пытаются удалить.
Кратко, судя по записям в интернете, HP Analytics service (он же TouchpointAnalyticsClientService.exe, он же HP Touchpoint Analytics, он же TAInstaller.exe, и т.д.) это программа, при помощи которой HP снимает телеметрию с вашего компьютера и отправляет в HP. Основная особенность её работы в том, что она портит жизнь пользователям HP, то процессор загружает, то, вот, MSDTC ломает.
Резюмируем
Присутствует проблема с работой MSDTC.
Симптомы:
- У вас компьютер HP.
- У вас упорно возникает ошибка "System.Data.SqlClient.SqlException (0x80131904): MSDTC on server 'имя-сервера' is unavailable."
- Также вы получаетет ошибку "8004E00F when trying to access COM+ Applications in Component Services" при работе со Службой компанентов, (см.).
- Наличие работающего сервиса HP Analytics service.
Быстрое решение:
- Запускаем утилиту
Кофигурация системы
:
- В службах отключаем
HP Analytics service
:
- Перегружаем компьютер.
Комментарии (34)
surius
15.08.2019 14:59А что за модель у вас? Kакого года? Сам использую elitebook 840 G3. Использую в формате «как дали». Ничего руками в сервисах специально не трогал. Проверил, у меня такого сервиса нет…
azzas
15.08.2019 15:06У HP тонны мусорного софта с не очевидным функционалом. Недавно чистил один такой, задолбался этот мусор удалять, который для обычного пользователя бесполезен, но висит в памяти.
UksusoFF
15.08.2019 22:27+1Софт это еще ладно. Недавно приносили HP ноут, так там на нем чтобы заменить HDD надо ввести сервис-код. Вроде как должны по телефону разблокировать, но ноут довольно старый и сказали что только поездка в СЦ и замена HDD в районе 3к русских рублей.
KyZZMI4
16.08.2019 17:24Не подскажите модель? Сколько НР было, такого не встречал.
UksusoFF
16.08.2019 17:33Пардон это был Dell. Но HP тоже такое делают: https://github.com/bacher09/pwgen-for-bios#supported-bios-types
Ну и ниже еще: https://habr.com/ru/post/463787/#comment_20513615
AndyPike
16.08.2019 01:07Вендорную муть не сносил.
ProBook 470 G4.
А как он обновляться будет?
С дисками проблем не было — на место DVD поставил HDD, а внутрь SSD 240G давно.
Как часы пару лет уже работает.
Правда, корпус разваливается уже.
Панелька с клавой — да, это алюминий. Всё остальное — пластик.
BIOS с глюками запускается, позорище (сначала было нормально).
sym.ru/img/20190816_011119.jpg
Надписи исчезли.
Два бланковых пробела зачем-то, без пояснений.
Помню, там ранее было «Press ESC to enter BIOS».
Халатно как-то.
Vodochnik
16.08.2019 12:55Просто к сведению, раньше при запароленном биосе саппорт HP высылал smc.bin, сваренный под конкретный серийник, ууид и прочие айди.
Кто знает о чем речь — можете забыть, с июня они перестали это делать. Саппорт по телефону злорадно говорит что усё, приплыли тапки до дивана. Но можно заменить материнку, всего-то 500 евро)
Т.е. дампить либо перепаивать 2 чипа.
varton86
16.08.2019 18:03Подскажите плиз, как переустановить на чистую ось, сейчас же установочные диски не поставляются с буком? По ключу оси или из скрытого раздела — а он есть на HP?
AndyPike
16.08.2019 18:56Что-то есть, но я особо не шарю.
Я покупал с DOS, сразу купил SSD, а на HDD всё снёс.
Т.к. опыт «тыжпрограммиста» уже лет 20, накатил сверху Убунту на HDD и поверх Win 10 на SSD (основная лошадка). Торренты в помощь.
Если покупали с Win 10, то спросите ТП. Может, ключ на какой-то наклейке на задней крышке.varton86
16.08.2019 19:35Спасибо. Стоит Win 10, но ключа-наклейки нет, как ни странно. Покупал в Мвидео. Буду думать )
KASPER56
17.08.2019 00:54В ноутбуках с предустановленной Windows, как правило, в BIOS зашит OEM-ключ.
Вы можете установить ту же редакцию Windows и она автоматически активируются этим ключом.
На сайте MS есть утилита «Media Creation Tool» с помощью которой можно скачать образ и создать загрузочную флешку или диск.
Dr_Sigmund
16.08.2019 18:58У нас в конторе в своё время ещё на XP развернули автоматическую установку сертификатов на ноутбуки, и столкнулись с тем, что примерно каждый пятидесятый ноутбук сертификат не получает. Никаких ошибок, ничего в логах — просто не запускает процесс и всё. После серьёзного изучения вопроса обнаружился виновник — софт от считывателя отпечатков пальцев, который устанавливал свою gina.dll (библиотека, рисующая диалог входа в систему). Эта библиотека вызывается из winlogon.exe, и она, ни много ни мало, меняла текущую директорию вызывающего процесса. В результате winlogon.exe терял способность запустить процесс userinit.exe, который и выполняет получение сертификатов, поскольку запускал его, как оказалось, только по имени файла, без пути.
tlv
19.08.2019 07:54Я не знаю, как это выходит, но тоже сталкивался с проблемами, связанными с неработоспособностью MSDTC.
Ноутбук, но Think Pad, тоже пришлось прибить один сервис — но приехавший с драйвером Azalia Codec сервис Dolby Sound. И сразу заработал MSDTC.
daggert
Всегда было правило: Покупаешь комп, сносишь все, а лучше даже ставишь чистую ОС. Все драйвера ставишь по VID, любые официальные дрова (spXXXXXX.exe) разархивируешь и ставишь напрямую из диспетчера устройств. Всякие утилиты и иже с ним ставишь только если надо.
Весь шлак от производителя надо на законодательном уровне запретить устанавливать без прямого согласия пользователя. Куда смотрит ЕС...
ExtenZ
Согласен, я так и сделаю на серии HP probook 6560b/6570b и elitebook 8560p/8570p
Косяк может быть если дискретное видео от АМД, но там ставлю драйвера 2013 года и все
ps windows7
YMA
Делаю аналогично, в дополнение — обязательно чищу (заполняю нулями) и переразбиваю накопитель. После этого ставлю чистую ОС и драйвера, стандартный набор программ, убеждаюсь в корректной работе и делаю резервную копию диска…
Ни разу не пожалел о снесенных программах от производителя и всяких разделах восстановления (уже больше 4 лет пользуюсь HP 430G3, устраивает).
Dr_Sigmund
Я понимаю — забивать нулями свои секретные данные, чтобы не утекли, но зачем забивать предустановленный заводской софт, особенно если вы переразбили диск?
YMA
Забивать нулями диск — чтобы программы для разбивки диска не смотрели на предыдущие параметры. Много раз сталкивался со странными явлениями, если пытаешься просто удалить все разделы, и переразбить диск по-своему — не очищая диск.
PS: Весь чистить не обязательно, обычно достаточно первые несколько мегабайт затереть.
Al_Azif
Слышал что единицами надёжнее, никогда не пробовал правда…
YMA
Могу предположить, что без разницы ;) Всё равно при записи нулей на уровне пользовательских данных на физическом уровне на диск пишется что-то куда более сложное.
arkamax
Надеюсь, что в книгу Ч. Дарвина «Происхождение видов путем естественного отбора». Юзеры должны думать своей головой. Если же законодательно все запретить, получим… а впрочем, уже почти получили.
tendium
Если человек является, например, отличным хирургом, должен ли он еще и в компах шарить на уровне: драйвера ставишь по VID, любые официальные дрова (spXXXXXX.exe) разархивируешь и ставишь напрямую из диспетчера устройств?
arkamax
Я знаю нескольких хирургов (именно хирургов), которые умеют ставить драйвера из пакетов. В целом — нет, не должен — но тогда стоит нанять того, что шарит. Третий вариант — его система будет менее устойчива. Это как с автомобилями — если самому не следить и не ездить к механикам, получим ржавое ведро. Но с компьютерами почему-то считается, что они всегда будут работать так, как в самом начале. Запрет же чего-то на законодательном уровне, если оно не является чистым злом (что-то уровня 10-ти заповедей) слишком часто ведет к ограничению прогресса (как вариант — юзеры ленятся, тупеют, и становятся легкой мишенью для тех, кому закон до лампочки).
daggert
Ну а если не контролировать — получим сотни несовместимых разъемов и десятки АПИ, всякие ASUS Media Bus, Zune и iTunes.
Некоторые вещи должны быть прописаны законодательно, например micro USB в качестве разъема для телефона и штекер NN-вида для зарядки ноутбука обязательно на 19в, а так-же, как я считаю, запрет на предустановку любого софта без согласия пользователя. Захотел он накатить винду — ок, +100$ и винда одним кликом. Захотел поставить шлакваре от хапэ/асуса/эмсиай — нажал кнопку "да" на сайте производителя и оно поставилось. Захотел поставить треш-софт на телефон — при первом запуске нажал "да" и ему влилось всякий ибей, амазон, антивирус макафи и тонна всего другого что обычно пихают, и что нормальный человек выгребает, а не продвинутый не может.
arkamax
Ответил выше — моя мысль про прогресс здесь применима точно так же. Если у продвинутых не будет преимущества перед «нормальными», мы получим гомогенную толпу, потому что стимулов прогрессировать не будет. Со штекерами — дайте рынку решать, он лучше любых госдум разберется, какому разъему выжить.
daggert
Рыночное регулирование не работает в таких масштабах. Посмотрите на зоопарк зарядников для мобильников до принятия решения об унификации и micro USB.
Массовый пользователь не способен выбирать, для поддержания этой аксиомы существует пару сотен тонн маркетологов.
YMA
Поддерживаю, и надеюсь, что при всех его недостатках в ноутбуках приживется USB Type-C с PD для зарядки. Очень хочется избавиться от вязанки зарядников.
PS: Еще бы и для электротранспорта мелкого приняли стандарт — а то сейчас там такой зоопарк, ужас берет — штекеры разного диаметра, многоконтактные разъемы на любой вкус. И батареи неплохо бы сразу стандартизировать — а то используют напряжения от 24 до 100 вольт с шагом в 4 вольта…
daggert
Type-C слишком мелкий и хрупкий для большой техники + я не знаю можно-ли будет через него 150W протащить. Лично мне более нравился magsafe, который упразднили или обычный двухпиновый штекер с глубоким ходом в 4 или 6мм (как у HP). Еще-б батареи были стандартизированы, ато придумают даже в пределах одной линейки кучу разных...
С электротранспортом да, после просмотра ролика Академика где он купил электромашину — прям ощутил боль, хотя я сам щас так-же мучаюсь с бензиновой машиной из США где все чуток по другому.