Невозможно воссоздать именованную трубу под Vista - PullRequest
0 голосов
/ 20 декабря 2009

В моем приложении у меня есть приложение и сервис, который делает вещи для приложения. Они общаются через именованный канал. Теперь я могу запустить приложение, и оно запускает службу и подключается, и это работает хорошо.

Когда приложение загружает обновление, оно перезапускается само (для выгрузки используемых модулей), убивая службу, а затем снова запускает службу для установки обновления. Это работает нормально на Windows XP и 7, однако Vista продолжает возвращать доступ, запрещенный при попытке воссоздать канал.

Я создаю канал с флагом FILE_FLAG_FIRST_PIPE_INSTANCE, чтобы иметь только один канал. Я перезапускаю приложение, используя CreateProcess, и новый экземпляр ожидает остановки старого экземпляра.

Если я полностью уничтожу приложение и перезапущу его, оно сможет установить обновление и запустить его нормально.

Это сводит меня с ума, есть идеи?

1 Ответ

1 голос
/ 20 декабря 2009

Какие атрибуты безопасности вы передаете в вызов CreateFile, который открывает дескриптор канала? Вы позволяете дескрипторам наследоваться при вызове CreateProcess?

...