Applications that directly talk to USB drives for examples Signature Pad etc.. can have challenges to work, if they are run inside isolation environment. Imagine a situation where:
- An Application “X” that is locally installed and talks to an USB Drive or some hardware directly.
- App “X” needs to work with an application that is streamed to Desktop or Server (or) App that is streamed needs to talk to/Launches the locally installed App “X”.
- In both the situations app “X” installed outside isolation needs to run inside Isolation to work with Streamed Application.
When the application that needs to talk directly to USB drivers or other hardware, runs inside Isolation they may fail, especially if the App “X” makes use of NamedPipes to talk with USB Drive (which is the most commonly used method). Failure is caused because, by default all the NamedPipes created by any application inside isolation are Isolated, means these namedpipes created by app inside isolation are not understandable for outside environment.
We can make use of Rules feature of App Streaming, to solve this issue, let me explain how. There can be 2 solutions:
Solution 1: Add a Rule to Ignore all the namedpipes, for the profiled app that needs to run with/launch App “X”.
This solution is not perfect way to do things but easiest way to get App “X” run inside isolation successfully. But this may have side effects if profile App itself creates Namedpipes, in which case those NamedPipes created by Streamed App will be visible outside isolation, which may break multi-user scenarios..
Solution 2: Find out specific NamedPipes needed/Created by App “X”, and Ignore only those.
We can Ignore only those NamedPipes that are created by App “X” so that the side effect we discussed in Solution 1 can be averted. We can find-out all the namedpipes that App “X” using Process Explorer tool.
- Launch App “X” locally (not in Isolation), and open Process Explorer tool (procexp.exe).
- List down all the NamedPipes used by App “X” from process explorer, given a snapshot below for an example app:
- Now edit the Target of Streamed App Profile, add Ignore rule for NamedPipes for those specific NamedPipes
Streaming the Rules added Profile and launching App “X” that needs to talk to USB based hardware, will work fine.
A consultant contacted me with a similar issue, with the above workaround problem was solved, and one of my senior asked to write up a post, so that, this can be helpful for others also with similar issue, credits for this post goes to both.