0

我有一个带有几种方法的网络服务,这些方法试图在系统上运行或发送消息另一个 .EXE 以执行特定任务。

我们可以使用某些参数启动 .EXE 进程,或者向其发送 WndProc 消息以使其执行所需的操作。这在我的系统上本地运行良好,使用 cmd 中的参数调用 exe 或在 Visual Studio 中调试时从 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 回答