Joining a new project, the development and maintenance of a long-lived program, I decided to upgrade my laptop. For a long time I wanted to get myself something so compact, light, so that I could safely take with me to the coffee shop, work for an hour or two outside the office.
The choice fell on the HP laptop with a 14 '' screen that supports the 1920x1080 extension, which was the decisive criterion for the choice. The hardware seems to be good, but the software from HP makes you wonder if it was necessary.
The functionality of the program with which you need to work, as I said, is long-lived, i.e. He experienced many iterations, changes of managers and developers, and is such a mix of everything that is correct, understandable and incomprehensible with the status "Why was this necessary?". All in all, good legacy code.
So, one of the features of the functionality is the use of distributed transactions. Those. the computer should run the MSDTC service (aka Distributed Transaction Coordinator, aka Distributed Transaction Coordinator) and the corresponding settings are enabled.
Everything seems to be fine. For other team members (they do not use HP), the project is compiled, launched and all scenarios are worked out. Work is in full swing.
Good. I take my brand new HP, configure, install, download, compile, run, run scripts and bam, error:
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 ...
Good. Anything can happen. I'm starting to dig.
After hours spent, removing the antivirus, disabling the firewall (aka firewall), using all the recommendations from the Internet, the problem remains. The error stubbornly creeps out.
Exploring another post Error: 8004E00F when trying to access COM + Applications in Component Services we come across a comment, thanks tsd.
Good. Disable services starting with HP, since there are few of them:
Disabling the very first service "HP Analytics service" gives the result. It just starts to work. MSDTC works fine, all scripts are successful.
So who are you, HP Analytics service? We look at the full path and name of the executable file:
C:\windows\System32\DriverStore\FileRepository\hpanalyticscomp.inf_amd64_19ec9c352a1b5135\x64\TouchpointAnalyticsClientService.exe
In the search engine, just type Touchpoint Analytics Client
to read everything good about this program and how hard they try to remove it.
Briefly, judging by the records on the Internet, HP Analytics service (aka TouchpointAnalyticsClientService.exe, aka HP Touchpoint Analytics, aka TAInstaller.exe, etc.) is a program with which HP removes telemetry from your computer and sends at HP. The main feature of its work is that it spoils the lives of HP users, then the processor loads, then, now, MSDTC breaks.
There is a problem with the operation of MSDTC.
HP Analytics service