特定のタスクを実行するために、システム上で別の .EXE を実行またはメッセージを送ろうとするいくつかのメソッドを備えた Web サービスがあります。
特定のパラメーターを使用して .EXE プロセスを開始するか、WndProc メッセージを送信して目的の操作を実行させることができます。これは、Visual Studioでデバッグするときに、cmdのパラメーターを使用してexeを呼び出すか、WebサービスからWndProcメッセージを送信するシステムでローカルに正常に機能します。
ただし、これは実際の環境では機能しません。パラメータメソッド(DoSomething)を使用して.Exeを実行し、例外をファイルに書き込みました。
System.ComponentModel.Win32Exception (0x80004005): No Access
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at Someprogram.ProgramService.DoSomething(String text)
wndproc sendmessage の他のメソッドも try/catch でラップしましたが、例外はスローされませんでした。ファイルを印刷したので、実際にはプロセスを見つけます:
public static void SendMessageToSomeProgram(string message) {
Process[] processes = Process.GetProcessesByName("SomeProgram");
if (processes.Length >= 1) {
//iterate through all running target applications
foreach (Process p in processes) {
//test write if process found
TextWriter tw = new StreamWriter(@"c:\wndprocfile.txt"); //this file is printed
tw.WriteLine(DateTime.Now.ToString());
tw.Close();
//do stuff
try {
byte[] sarr = System.Text.Encoding.Default.GetBytes(message);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = message;
cds.cbData = len + 1;
SendMessage(p.MainWindowHandle, WM_COPYDATA, 0, ref cds);
} catch (Exception ex) {
TextWriter tw2 = new StreamWriter(@"c:\wndProc_errorfile.txt"); //not printed
tw2.WriteLine(DateTime.Now.ToString() + "Exception: " + ex.ToString());
tw2.Close();
}
}
}
これで、このようなセキュリティを導入するのが良い理由がわかりましたが、これを回避する簡単な方法はありますか? 多分IISのいくつかの設定ですか?
更新情報: サーバーは IIS 5.1 を実行しているため、アプリケーション プール機能はありません。