我在使用一些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.exe
目录运行inetpub\site\bin
并将文件从一个目录吐出到另一个目录。我很确定lame.exe
甚至没有启动:将StandardOutput重定向到StreamReader,我没有看到任何输出。而且,显然没有产生例外或错误。
应用程序在其自己的App Pool中运行,位于“ApplicationPoolIdentity”下。 W3 Publishing Service在本地系统下运行,我尝试勾选“允许服务与桌面交互”。
我甚至将网络服务帐户的(临时)完全访问权限授予整个\inetpub\site
目录。
有没有人知道在IIS7.5下使用ASP.NET来创建新进程的“权威”方式,以及我需要使用哪些凭据和/或权限?有没有什么简单的方法可以看到我的外部进程是否正在启动,所以我可以缩小明显缺乏权限的地方让我感到困扰?
答案 0 :(得分:1)
John Saunders所说的关于不在asp.net线程中创建进程的内容!我建议只在源目录后面的服务器上运行第二个进程并在后台转换文件,但我看到你正在尝试等待结果。这也是一个坏主意,因为它会暂停处理线程直到它完成 - 这也不属于生产服务器,不会使用长时间运行的任务,这样就会破坏可扩展性。