SendMessageTimeout иногда завершается с ошибкой при отправке на правильный дескриптор - PullRequest
0 голосов
/ 01 июня 2018

Мы отправляем сообщение Win32 от одного процесса (process01) другому (process02).

Console.WriteLine(targetHandle); // 0x3072a

SendMessageTimeout(
    targetHandle, 
    WM_COPYDATA, 
    IntPtr.Zero, 
    ref cds, 
    SendMessageTimeoutFlags.SMTO_NORMAL, 
    timeoutMs, 
    out result);

Мы установили, что process01 отправляет правильный дескриптор.Иногда сообщение приходит в process02, а в другое время оно не приходит.

// SomeForm.cs
protected override void WndProc(ref Message m) {
    // Sometimes the message arrives here

    Console.WriteLine(m); // 0x3072a
}

Когда сообщение не приходит в process02, сообщение об ошибке в process01 отсутствует.Он просто молча терпит неудачу.

Что может быть причиной этого?Как мы можем далее устранить это?Мы использовали Spy ++ для поиска и прослушивания сообщений для получателя.Spy ++ всегда находит процесс по его дескриптору.Когда сообщение не отображается в SomeForm.WndProc, оно также не отображается в сообщениях Spy ++.

1 Ответ

0 голосов
/ 06 июня 2018

Проблема заключалась в повышении разрешения:

  • сеанс отправки не был повышен, а
  • сеанс получения был повышен (т. Е. Запущен от имени администратора).
...