在win form c#中通过批处理文件执行.exe时,Process.MainWindowHandle为零

时间:2014-02-16 14:16:14

标签: c#

在winform窗口中的exe应用程序。当我直接使用进程类调用.exe时,我得到了句柄和应用程序附加表单窗口。但是当我使用进程类通过.bat文件调用相同的.exe时,MainWindowhandle始终为零,而.exe作为单独的窗口打开。 WaitForInputIdle也没有工作,因此我使用线程睡眠,工作正常。代码的一部分显示: -

              Process p = null;                
              p = Process.Start(@"E:\hude\test.bat");

// test.bat有以下文字: - START“”“E:\ hude \ PROJECTION.exe”

           // p = Process.Start(@"E:\hude\PROJECTION.exe");

            //wait for the process to be created and enter idle condition
            //p.WaitForInputIdle(1000);
            if (p.HasExited == false)
            {
                string name = p.ProcessName;
                MessageBox.Show("Name = " + name);
                System.Threading.Thread.Sleep(5000);

            }
            //wait for the process to be created and enter idle condition
            //p.WaitForInputIdle(1000);

            //p.Refresh(); 
            // Get the main handle
            appWin = p.MainWindowHandle;
            if (appWin == IntPtr.Zero)
                MessageBox.Show("handle not created ");
            else
                MessageBox.Show("handle created ");

1 个答案:

答案 0 :(得分:0)

您要保留的流程对象是表示.BAT文件流程的流程。由于bat文件生成另一个进程,因此需要进入该进程以检查主窗口句柄。您可以使用GetProcessesGetProcessesByName查找批处理文件生成的进程。