Our application uses WCF over named pipes to communicate between two processes (note: neither process is a Windows Service.) Our application has been running in the field w
I have found a method to display which applications use net.pipe(though not necessarily which are using it incorrectly).
First download the Handle application from sysinternals:
https://technet.microsoft.com/en-us/sysinternals/handle.aspx?f=255&MSPPError=-2147217396
Then open a command prompt as administrator, and run "Handle.exe net.pipe" (minus quotes). This will list all applications using net.pipe that are currently running. From there, you can kill or disable one at a time, until your culprit is discovered. I almost never have more than 4-5 processes using it. If you fail to run command prompt as administrator, it may give 0 results.
Below are all the applications I've found that interfere with net.pipe:
Procore Drive (Procore DriveService.exe). Uses net.pipe://+/
:
Procore DriveService.exe pid: 4204 type: Section 43C: \BaseNamedObjects\net.pipe:EbmV0LnBpcGU6Ly8rLw==
Keynetix.Cloud.Launcher.Service.exe. Uses net.pipe://+/
:
Keynetix.Cloud.Launcher.Service.exe pid: 5524 type: Section 4B8: \BaseNamedObjects\net.pipe:EbmV0LnBpcGU6Ly8rLw==
I support an application that requires net.pipe, so I'll update this list as I find more services that do this.
We at Microsoft have zeroed down the issue to the way Garmin Core Update Service creates named pipes. Named pipes can be created in different Scopes – Global and Local. Global scope is essentially machine wide and Local is specific to the user. Garmin’s application is
a. running as System service, so the scope for listening named pipe service is global.
b. listening on the root address of “net.pipe://localhost/” (e.g. without any sub-paths/segments).
c. Using a StrongWildcard host name comparison mode.
d. Items a through c mean that Garmin’s application is essentially a catch-all for any net-pipe connection that doesn’t match something more specific.
e. It also means that Garmin is completely blocking all listeners that are using a local scope
The ideal fix for this would be a change in Garmin application such that it registers its net.pipe listener with a more specific url.
One possible answer to your question "How can another application, simply by running, break our own application...":
I have no idea whether the Garmin service actually does use WCF NetNamedPipeBinding, but this is one possibility you should investigate. The problem can be avoided by always using absolute URLs for NetNamedPipe endpoints.
OK, so following the updates to the question, we now know that the Garmin service is using WCF NetNamedPipeBinding, and we know that your application registers its service using an absolute address, so the above explanation is not the complete story.
Here is another hypothesis:
What can you do about it? I would suggest: