私の開発環境では問題なく動作するが、運用サーバーでは動作しない 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
あるディレクトリから別のディレクトリにファイルを吐き出すことだけです。StandardOutput をStreamReaderlame.exe
にリダイレクトしても、何も出力されていないことがわかります。繰り返しますが、例外やエラーは明らかに生成されません。
アプリケーションは、「ApplicationPoolIdentity」の下の独自のアプリケーション プールで実行されています。W3 Publishing Service はローカル システムで実行されており、「デスクトップとの対話をサービスに許可する」にチェックを入れてみました。
\inetpub\site
ディレクトリ 全体に対するネットワーク サービス アカウントの (一時的な) フル アクセス権も付与しました。
IIS7.5 で ASP.NET を取得して新しいプロセスを作成する「決定的な」方法と、使用する必要がある資格情報や権限を知っている人はいますか? 外部プロセスが開始されているかどうかを確認する簡単な方法はありますか?