0

特定のタスクを実行するために、システム上で別の .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 を実行しているため、アプリケーション プール機能はありません。

4

1 に答える 1

1

IIS 内のサービスは、それが実行されているアプリ プールに接続されたユーザーとして実行されます。そのため、アプリ プールのユーザーを、起動したいアプリケーションを起動するためのアクセス権を持つユーザーに変更してみてください。

これを行うには、アプリケーションのアプリ プールを確認してから、アプリ プールに移動してユーザーを変更します。ユーザーを変更するには、パススルー認証をオフにする必要があります。

于 2012-10-08T09:28:46.510 に答える