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