WMEncoder引发COMException(0x80004005)未指定的错误

时间:2009-11-03 21:54:48

标签: c# com

所以我正在运行此代码

    public static void ConvertToWma(string inFile, string outFile, string profileName)
    {
        // Create a WMEncoder object.
        WMEncoder encoder = new WMEncoder();
        ManualResetEvent stopped = new ManualResetEvent(false);
        encoder.OnStateChange += delegate(WMENC_ENCODER_STATE enumState)
        {
            if (enumState == WMENC_ENCODER_STATE.WMENC_ENCODER_STOPPED)
                stopped.Set();
        };
        // Retrieve the source group collection.
        IWMEncSourceGroupCollection srcGrpColl = encoder.SourceGroupCollection;

        // Add a source group to the collection.
        IWMEncSourceGroup srcGrp = srcGrpColl.Add("SG_1");

        // Add an audio source to the source group.
        IWMEncSource srcAud = srcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
        srcAud.SetInput(inFile, "", "");

        // Specify a file object in which to save encoded content.
        IWMEncFile file = encoder.File;
        file.LocalFileName = outFile;

        // Choose a profile from the collection.
        IWMEncProfileCollection proColl = encoder.ProfileCollection;
        proColl.ProfileDirectory = AssemblyInformation.GetExecutingAssemblyDirectory();
        proColl.Refresh();
        IWMEncProfile pro;

        for (int i = 0; i < proColl.Count; i++)
        {
            pro = proColl.Item(i);
            if (pro.Name == profileName)
            {
                srcGrp.set_Profile(pro);
                break;
            }
        }
        // Start the encoding process.
        // Wait until the encoding process stops before exiting the application.
        encoder.SynchronizeOperation = false;
        encoder.PrepareToEncode(true);
        encoder.Start();
        stopped.WaitOne();
    }

当encoder.PrepareToEncode被执行时,我得到一个COMException(0x80004005)。

一些注意事项:

1)该过程由ASP.NET Web服务生成,因此它作为NETWORK SERVICE运行 2)inFile和outFile是绝对的本地路径,它们的扩展是正确的,另外inFile肯定存在(这在过去一直是问题的根源) 3)当我以自己的身份运行程序但在ASP.NET上下文中不起作用时程序会起作用。

这告诉我一个安全权限问题,所以此外我已经将包含程序的目录和包含音频文件的目录的完全控制权授予了NETWORK SERVICE。所以我真的不知道我还能在安全方面做些什么。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

不支持在Windows服务中运行基于WM Encoder SDK的应用。它出于各种原因使用隐藏窗口,并且没有服务中的桌面窗口。 DRM肯定会因没有用户配置文件而失败。此外,即使您在用户的桌面上与WME实例进行服务对话,Microsoft也只支持每台机器4个并发请求,因为WME中的全局锁定(我知道,不是很好的编程,但WME已经过时了)。有关更具伸缩性的解决方案,请考虑使用Windows Media Format SDK。

您可能希望将基于WM Encoder的应用程序移动到Expression Encoder SDK,因为WM Encoder的支持即将结束。