C# 4.0 从Windows 7服务播放wav/mp3

C# 4.0 从Windows 7服务播放wav/mp3,c#-4.0,windows-7,windows-services,naudio,C# 4.0,Windows 7,Windows Services,Naudio,我需要从Windows7/2008中的服务中播放声音文件(wav或mp3可以)。。。我们在WinXP中的操作方式已经不起作用了。我一直在关注这个问题,但没有成功,在各种组合中。声音通过调试器可以正常播放,但一旦我将其作为服务安装,它就不会播放,并且事件日志证明调用正在进行。我也跟踪了链接,得到了同样的结果 下面是代码片段。这是一个C#服务,VS 2010、.Net 4.0、NAudio 1.5.4.0。我正在使用 InstallUtil以安装/删除服务 编写代码时,每次我都会注释掉Wav或MP3

我需要从Windows7/2008中的服务中播放声音文件(wav或mp3可以)。。。我们在WinXP中的操作方式已经不起作用了。我一直在关注这个问题,但没有成功,在各种组合中。声音通过调试器可以正常播放,但一旦我将其作为服务安装,它就不会播放,并且事件日志证明调用正在进行。我也跟踪了链接,得到了同样的结果

下面是代码片段。这是一个C#服务,VS 2010、.Net 4.0、NAudio 1.5.4.0。我正在使用 InstallUtil以安装/删除服务

编写代码时,每次我都会注释掉Wav或MP3的内容和其中一种方法。。。他们都成功地演奏了这首歌

    static class Program
    {
        [DllImport("kernel32.dll")]
        public static extern Boolean AllocConsole();

        static void Main(string[] args)
        {
            m_eventLog = new EventLog();
            m_eventLog.Source = "EventLoggerSource";

            if(args.Length > 0 && args[0].ToLower() == "/console")
            {
                AllocConsole();
                EventLoggerApp app = new EventLoggerApp();
                app.Start();

                m_eventLog.WriteEntry("INFO (Calling Player)");
                string fileFullPath=@"c:\aaasound\bunny_troubles.wav",fileFullPath2=@"c:\aaasound\dreams.mp3";

                // Wav file
                IWavePlayer wavePlayer=new WaveOutEvent();  // Method 1
                IWavePlayer wavePlayer=new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared,false,100); // Method 2   
                AudioFileReader audioFile=new AudioFileReader(fileFullPath);
                audioFile.Volume = (float)1.0;
                wavePlayer.Init(audioFile);

                // MP3 file
                IWavePlayer wavePlayer=new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Shared,true,100); // Method 1- EventSync/not both work
                IWavePlayer wavePlayer=new WasapiOut(NAudio.CoreAudioApi.AudioClientShareMode.Exclusive,false,100); // Method 2- EventSync must be false or throws an exception
                WaveStream mp3Reader = new Mp3FileReader(fileFullPath2);
                WaveChannel32 inputStream=new WaveChannel32(mp3Reader);
                WaveStream wavStream=new WaveChannel32(inputStream);
                wavePlayer.Init(wavStream);

                //this.wavePlayer.PlaybackStopped += new EventHandler(wavePlayer_PlaybackStopped);
                wavePlayer.Play();
                while(wavePlayer.PlaybackState == PlaybackState.Playing)
                {
                    Thread.Sleep(100);
                }

我不明白你问题的最后一句话。你是说如果你注释掉一些代码,你有时可以在Win7中的服务中播放音频吗?不,我只是说代码片段不会按原样编译。。。我注释了4种方法中的每一种(wavout/WasapiOut用于wav和mp3)。这些音频都不会播放。请原谅我有点离题,但我很好奇:你为什么要编写一个播放任何声音的服务?服务有很多理由播放来自服务的声音。如果您正在从硬件输入(如按钮)读取事件,并希望在按下按钮时发出嘟嘟声。您需要向用户提供某种反馈