У меня есть ситуация, когда я запускаю процесс в своем коде, чтобы настроить канал 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
происходит после минуты попытки получить дескриптор главного окна, отличный от нуля.