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


Выбор пал на ноутбук 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.

Быстрое решение:


  1. Запускаем утилиту Кофигурация системы:
  2. В службах отключаем HP Analytics service:
  3. Перегружаем компьютер.

Комментарии (34)


  1. daggert
    15.08.2019 14:47
    +1

    Всегда было правило: Покупаешь комп, сносишь все, а лучше даже ставишь чистую ОС. Все драйвера ставишь по VID, любые официальные дрова (spXXXXXX.exe) разархивируешь и ставишь напрямую из диспетчера устройств. Всякие утилиты и иже с ним ставишь только если надо.


    Весь шлак от производителя надо на законодательном уровне запретить устанавливать без прямого согласия пользователя. Куда смотрит ЕС...


    1. ExtenZ
      15.08.2019 15:29

      Согласен, я так и сделаю на серии HP probook 6560b/6570b и elitebook 8560p/8570p
      Косяк может быть если дискретное видео от АМД, но там ставлю драйвера 2013 года и все

      ps windows7


    1. YMA
      15.08.2019 17:15

      Делаю аналогично, в дополнение — обязательно чищу (заполняю нулями) и переразбиваю накопитель. После этого ставлю чистую ОС и драйвера, стандартный набор программ, убеждаюсь в корректной работе и делаю резервную копию диска…

      Ни разу не пожалел о снесенных программах от производителя и всяких разделах восстановления (уже больше 4 лет пользуюсь HP 430G3, устраивает).


      1. Dr_Sigmund
        16.08.2019 18:49
        +2

        Я понимаю — забивать нулями свои секретные данные, чтобы не утекли, но зачем забивать предустановленный заводской софт, особенно если вы переразбили диск?


        1. YMA
          19.08.2019 10:17

          Забивать нулями диск — чтобы программы для разбивки диска не смотрели на предыдущие параметры. Много раз сталкивался со странными явлениями, если пытаешься просто удалить все разделы, и переразбить диск по-своему — не очищая диск.
          PS: Весь чистить не обязательно, обычно достаточно первые несколько мегабайт затереть.


      1. Al_Azif
        19.08.2019 02:45

        Слышал что единицами надёжнее, никогда не пробовал правда…


        1. YMA
          19.08.2019 10:19

          Могу предположить, что без разницы ;) Всё равно при записи нулей на уровне пользовательских данных на физическом уровне на диск пишется что-то куда более сложное.


    1. arkamax
      16.08.2019 18:54

      Куда смотрит ЕС

      Надеюсь, что в книгу Ч. Дарвина «Происхождение видов путем естественного отбора». Юзеры должны думать своей головой. Если же законодательно все запретить, получим… а впрочем, уже почти получили.


      1. tendium
        17.08.2019 09:07

        Если человек является, например, отличным хирургом, должен ли он еще и в компах шарить на уровне: драйвера ставишь по VID, любые официальные дрова (spXXXXXX.exe) разархивируешь и ставишь напрямую из диспетчера устройств?


        1. arkamax
          18.08.2019 17:10

          Я знаю нескольких хирургов (именно хирургов), которые умеют ставить драйвера из пакетов. В целом — нет, не должен — но тогда стоит нанять того, что шарит. Третий вариант — его система будет менее устойчива. Это как с автомобилями — если самому не следить и не ездить к механикам, получим ржавое ведро. Но с компьютерами почему-то считается, что они всегда будут работать так, как в самом начале. Запрет же чего-то на законодательном уровне, если оно не является чистым злом (что-то уровня 10-ти заповедей) слишком часто ведет к ограничению прогресса (как вариант — юзеры ленятся, тупеют, и становятся легкой мишенью для тех, кому закон до лампочки).


      1. daggert
        17.08.2019 17:52

        Ну а если не контролировать — получим сотни несовместимых разъемов и десятки АПИ, всякие ASUS Media Bus, Zune и iTunes.


        Некоторые вещи должны быть прописаны законодательно, например micro USB в качестве разъема для телефона и штекер NN-вида для зарядки ноутбука обязательно на 19в, а так-же, как я считаю, запрет на предустановку любого софта без согласия пользователя. Захотел он накатить винду — ок, +100$ и винда одним кликом. Захотел поставить шлакваре от хапэ/асуса/эмсиай — нажал кнопку "да" на сайте производителя и оно поставилось. Захотел поставить треш-софт на телефон — при первом запуске нажал "да" и ему влилось всякий ибей, амазон, антивирус макафи и тонна всего другого что обычно пихают, и что нормальный человек выгребает, а не продвинутый не может.


        1. arkamax
          18.08.2019 17:14

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


          1. daggert
            18.08.2019 22:54

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


            1. YMA
              19.08.2019 10:26

              Поддерживаю, и надеюсь, что при всех его недостатках в ноутбуках приживется USB Type-C с PD для зарядки. Очень хочется избавиться от вязанки зарядников.

              PS: Еще бы и для электротранспорта мелкого приняли стандарт — а то сейчас там такой зоопарк, ужас берет — штекеры разного диаметра, многоконтактные разъемы на любой вкус. И батареи неплохо бы сразу стандартизировать — а то используют напряжения от 24 до 100 вольт с шагом в 4 вольта…


              1. daggert
                19.08.2019 11:41

                Type-C слишком мелкий и хрупкий для большой техники + я не знаю можно-ли будет через него 150W протащить. Лично мне более нравился magsafe, который упразднили или обычный двухпиновый штекер с глубоким ходом в 4 или 6мм (как у HP). Еще-б батареи были стандартизированы, ато придумают даже в пределах одной линейки кучу разных...


                С электротранспортом да, после просмотра ролика Академика где он купил электромашину — прям ощутил боль, хотя я сам щас так-же мучаюсь с бензиновой машиной из США где все чуток по другому.


  1. sidristij
    15.08.2019 14:47

    Слежкой занимаются все, кому не лень )


  1. surius
    15.08.2019 14:59

    А что за модель у вас? Kакого года? Сам использую elitebook 840 G3. Использую в формате «как дали». Ничего руками в сервисах специально не трогал. Проверил, у меня такого сервиса нет…


    1. mal_ls Автор
      15.08.2019 15:17

      HP PAVILION 14-ce2010ur. Куплен 2 месяца назад.

      Проверил, у меня такого сервиса нет…

      У парней отсюда проблема была в другом сервисе. Их тесткейс проходит?


  1. azzas
    15.08.2019 15:06

    У HP тонны мусорного софта с не очевидным функционалом. Недавно чистил один такой, задолбался этот мусор удалять, который для обычного пользователя бесполезен, но висит в памяти.


  1. rezdm
    15.08.2019 15:10

    … всегда сношу всё эту вендорную муть, вплоть до драйверов видюх, тач-пад контро-пенел, прочая, прочая.


    1. nochkin
      15.08.2019 18:38

      Проще переустановить чистую ОС. Благо, у HP и аналогичных производителей всякие SLIC зашиты на мамке.


  1. UksusoFF
    15.08.2019 22:27
    +1

    Софт это еще ладно. Недавно приносили HP ноут, так там на нем чтобы заменить HDD надо ввести сервис-код. Вроде как должны по телефону разблокировать, но ноут довольно старый и сказали что только поездка в СЦ и замена HDD в районе 3к русских рублей.


    1. KyZZMI4
      16.08.2019 17:24

      Не подскажите модель? Сколько НР было, такого не встречал.


      1. 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


  1. 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».
    Халатно как-то.


  1. Vodochnik
    16.08.2019 12:55

    Просто к сведению, раньше при запароленном биосе саппорт HP высылал smc.bin, сваренный под конкретный серийник, ууид и прочие айди.
    Кто знает о чем речь — можете забыть, с июня они перестали это делать. Саппорт по телефону злорадно говорит что усё, приплыли тапки до дивана. Но можно заменить материнку, всего-то 500 евро)
    Т.е. дампить либо перепаивать 2 чипа.


  1. varton86
    16.08.2019 18:03

    Подскажите плиз, как переустановить на чистую ось, сейчас же установочные диски не поставляются с буком? По ключу оси или из скрытого раздела — а он есть на HP?


    1. AndyPike
      16.08.2019 18:56

      Что-то есть, но я особо не шарю.
      Я покупал с DOS, сразу купил SSD, а на HDD всё снёс.
      Т.к. опыт «тыжпрограммиста» уже лет 20, накатил сверху Убунту на HDD и поверх Win 10 на SSD (основная лошадка). Торренты в помощь.

      Если покупали с Win 10, то спросите ТП. Может, ключ на какой-то наклейке на задней крышке.


      1. varton86
        16.08.2019 19:35

        Спасибо. Стоит Win 10, но ключа-наклейки нет, как ни странно. Покупал в Мвидео. Буду думать )


        1. KASPER56
          17.08.2019 00:54

          В ноутбуках с предустановленной Windows, как правило, в BIOS зашит OEM-ключ.
          Вы можете установить ту же редакцию Windows и она автоматически активируются этим ключом.
          На сайте MS есть утилита «Media Creation Tool» с помощью которой можно скачать образ и создать загрузочную флешку или диск.


          1. varton86
            19.08.2019 08:29

            Спасибо, не знал про фишку с BIOS.


  1. Dr_Sigmund
    16.08.2019 18:58

    У нас в конторе в своё время ещё на XP развернули автоматическую установку сертификатов на ноутбуки, и столкнулись с тем, что примерно каждый пятидесятый ноутбук сертификат не получает. Никаких ошибок, ничего в логах — просто не запускает процесс и всё. После серьёзного изучения вопроса обнаружился виновник — софт от считывателя отпечатков пальцев, который устанавливал свою gina.dll (библиотека, рисующая диалог входа в систему). Эта библиотека вызывается из winlogon.exe, и она, ни много ни мало, меняла текущую директорию вызывающего процесса. В результате winlogon.exe терял способность запустить процесс userinit.exe, который и выполняет получение сертификатов, поскольку запускал его, как оказалось, только по имени файла, без пути.


  1. AlexGluck
    16.08.2019 21:18

    Покупаю с дос или просто ставлю сразу свою Федору, уже лет 11 проблем нет.


  1. tlv
    19.08.2019 07:54

    Я не знаю, как это выходит, но тоже сталкивался с проблемами, связанными с неработоспособностью MSDTC.
    Ноутбук, но Think Pad, тоже пришлось прибить один сервис — но приехавший с драйвером Azalia Codec сервис Dolby Sound. И сразу заработал MSDTC.