0

我很难使用一些在我的开发环境中运行良好的 C#/ASP.NET (.Net 4) 代码,但不能在生产服务器上运行。

部分代码尝试启动一个新进程来运行 lame.exe(将 .WAV 文件转换为 .MP3):

Process convert = new Process
     {
       StartInfo =
       {
        FileName = AppDomain.CurrentDomain.BaseDirectory + "bin\\lame.exe",
        Arguments =  "--quiet -q 5 -b 16 \"" + filePath + "\" " + directory + "\\" +                                                        tempfile,
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true
       }
     };

 convert.Start();
 convert.WaitForExit();

这在我的 Windows 7 开发 PC 上运行良好。但是,在生产 Windows 2008R2 服务器上,它什么都不做:它不崩溃,也不抛出任何异常,只是什么都不做。

我意识到这几乎可以肯定是由用户权限引起的,但我正在努力解决这个问题。看了几十篇文章,其中一些相互矛盾,我不知道该怎么办。

应用程序需要做的就是lame.exeinetpub\site\bin目录运行并将文件从一个目录吐出到另一个目录。我很确定这lame.exe甚至还没有开始:将 StandardOutput 重定向到 StreamReader 后,我看不到任何输出。同样,显然不会产生任何异常或错误。

该应用程序在其自己的应用程序池中运行,位于“ApplicationPoolIdentity”下。W3 发布服务在本地系统下运行,我尝试勾选“允许服务与桌面交互”。

我什至已将网络服务帐户的(临时)完全访问权限授予整个\inetpub\site目录。

有谁知道在 IIS7.5 下获取 ASP.NET 以创建新进程的“最终”方式,以及我需要使用哪些凭据和/或权限?是否有任何简单的方法可以查看我的外部进程是否正在启动,以便我可以缩小明显缺乏权限的地方?

4

1 回答 1

1

John Saunders 关于不在 asp.net 线程中创建进程的说法!我建议只在源目录之后的服务器上运行第二个进程并在后台转换文件,但我看到您正在尝试等待结果。这也是一个坏主意,因为它会停止处理线程直到它完成 - 这也不属于生产服务器不要使用长时间运行的任务,这样会破坏可伸缩性。

于 2013-08-23T19:40:52.080 回答