Почему не удается получить дескриптор главного окна для запущенного процесса?

У меня есть ситуация, когда я запускаю процесс в своем коде, чтобы настроить канал IPC. Процесс, который я запускаю, представляет собой приложение MFC без поддержки CLR. Приложение, из которого я начинаю этот процесс, является модулем C # в приложении WPF (думаю, я не думаю, что это имеет значение для моей проблемы). Это работает с версией приложения, которая поддерживает CLR, и работает на всех компьютерах, кроме целевого объекта развертывания, компьютера с сенсорным экраном с Windows 7. Но по какой-то причине, когда я пробую его с этим точным сценарием, объект Process никогда не разрешает дескриптор главного окна ( Process.MainWindowHandle ). Есть ли другой (возможно, даже пинвок) способ сделать это? Это вопрос безопасности? Я наблюдаю за процессом. Дескриптор главного окна процесса действительно существует. Я не понимаю, что может быть не так.

Если это поможет, вот мой код.

        _applicationProcess = new Process();
        _applicationProcess.StartInfo.FileName = _strProcessPath;
        _applicationProcess.StartInfo.Arguments = _strProcessArguments;
        _applicationProcess.Start();

        long nTicks = Environment.TickCount;
        if (_applicationProcess.WaitForInputIdle(1 /*minute(s)*/ * 60000))
        {
            try
            {
                do
                {
                    // Don't let total processing take more than 1 minute(s).
                    if (Environment.TickCount > nTicks + 1 /*minute(s)*/ * 60000)
                        throw new ApplicationException("MFCApplication.Startup failed! The main window handle is zero!");

                    _applicationProcess.Refresh();
                }
                while (_applicationProcess.MainWindowHandle.ToInt32() == 0);

                _applicationHandle = new IntPtr(_applicationProcess.MainWindowHandle.ToInt32());
            }
            catch (Exception ex)
            {
                //Do some stuff...
                throw;
            }
        }
        else
        {
            // Do exception handling.
        }

Исключение ApplicationException происходит после минуты попытки получить дескриптор главного окна, отличный от нуля.

9
задан Tim Lloyd 18 January 2011 в 17:40
поделиться