Play wave file from a Windows Service (C#)

c#, windows-services

Solution

Playing a wav file from a service is definitely possible, at least on Windows 7 (and most likely Vista), by using the Windows Core Audio APIs. I recently verified this by making a small test service using NAudio. I just downloaded the NAudio sources and copied the "Wsapi" parts from their NAudioDemo project. This was on Windows 7 Enterprise 64bit, but I don't think that matters. The service was using the LocalSystem account. For the record, playing sounds from a service is a perfectly legitimate thing to do in an embedded setting.

Problem

I need to play a wav file from a C# application running as a Windows Service. I have tried both System.Media.SoundPlayer and a P/Invoke call to WinMM.dll (which is probably what SoundPlayer is doing). ``` [DllImport("WinMM.dll")] private static extern bool PlaySound(string fname, int Mod, int flag); ``` If I run my code as a console application, the sounds play. When I run it from a service, no luck, and I guess I'm not surprised. So is there a way to play a sound from a windows service? Would something like DirectSound help? Or am I going to be stuck writing a console application and having the windows service app communicate with it as an intermediary? Thanks in advance

Original source