The problem is that one of the dlls uses shared memory and mutex. If a process A runs as super user, the shared memory and mutex are created with super user privileges.
The process B launched with lower user privileges will fail to initialize or re-use shared memory and mutex because it has not enough privileges to do so.
Solutions in my case : Solution 1- stop using shared memory and mutex in dlls. Solution 2- be able to continue in degraded mode even if the shared memory or mutex can't be created/accessed. Solution 3- run both process with the same user.
I will take solution 2 because it fits the best to my usecase.