NamedPipeClientStream не может подключиться без UACC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 NamedPipeClientStream не может подключиться без UAC

Сообщение Anonymous »

Я пишу исполняемый файл для отправки данных в открытый процесс (игру Unity) через NamedPipe, чтобы «имитировать» глубокие ссылки, поступающие из браузера, с использованием специальной схемы URI. Это означает, что и клиент канала, и сервер канала будут работать только у локального пользователя для IPC.
Игра запускает NamedPipeServerStream и ждет, пока клиент подключится и отправит данные. :

Код: Выделить всё

var pipeSecurity = new PipeSecurity();
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
pipeSecurity.AddAccessRule(new PipeAccessRule(everyone, PipeAccessRights.Read, AccessControlType.Allow));

pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, 1,
PipeTransmissionMode.Message, PipeOptions.Asynchronous,
8192, 8192, pipeSecurity);

try
{
await pipe.WaitForConnectionAsync(cancellationTokenSource.Token);
}
Мой Deeplink.exe (WinExe, созданный с помощью Rider) создает NamedPipeClientStream при открытии и пытается подключиться:

Код: Выделить всё

using NamedPipeClientStream pipeClient = new(".", PIPE_NAME,
PipeDirection.InOut, PipeOptions.Asynchronous);
try
{
pipeClient.Connect(PIPE_TIMEOUT);
}
Это работает правильно только когда Deeplink.exe запускается от имени администратора.
В противном случае PipeClient.Connect выдает исключение UnauthorizedAccessException: Access путь запрещен.
Я не могу, чтобы мое приложение запрашивало UAC каждый раз, когда используется глубокая ссылка! Судя по общедоступному моно-репозиторию, это соответствует строке UnauthorizedAccess_IODenied_NoPathName, но я проверил, и PIPE_NAME правильные.
Сначала я подумал, что это так. из-за того, что Deeplink.exe находится в папке C:/Program Files, рядом с программой Unity, но нет, проблема сохраняется даже при попытке запустить ее с рабочего стола. Вместо этого я попытался использовать PipeAccessRights.FullAccess, но и здесь безуспешно.
Поскольку UAC — единственная разница между тем, работает он или нет, я должен предположить, что проблема связана с разрешениями (хотя я ожидал, что WorldSid позволит кому угодно и чему угодно получить доступ к каналу).
Есть ли что-то, что я упустил из виду? Неужели нет возможности подключиться к каналу без прав администратора?

Обновить
Для справки: исполняемый файл игры сначала запускается из программы Game Launcher (которую я также разработал в Unity), которая просто вызывает:

Код: Выделить всё

Process process = new();
process.StartInfo.FileName = "/path/to/game.exe";
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = false;

process.Start();
Я обнаружил следующее:
  • Открытие Game.exe напрямую и последующий запуск Deeplink.exe< /code> работает как ожидалось.
  • Открытие Launcher.exe, который затем запускает процесс Game.exe, а затем запуск Deeplink.exe не работает. UAC не необходим ни на каком этапе процесса.
Силл ошарашен этим. Я начал предполагать, что мой NamedPipeClientStream виноват, но, возможно, запуск Game.exe с этими конкретными свойствами StartInfo мешает правильному созданию NamedPipeServerStream?

Обновление 2
Тайна сгущается: я попробовал запустить game.exe с помощью UseShellExecute = false, и теперь каналы взаимодействуют правильно... но только иногда! Кажется, это работает примерно в 75% случаев. Я действительно понятия не имею, что спорадически запрещает доступ к моему клиентскому каналу, серверный всегда запускается, согласно моим журналам.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ithout-uac
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • NamedPipeClientStream не может подключиться без UAC
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • NamedPipeClientStream не может подключиться без UAC
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • NamedPipeClientStream не может подключиться без UAC
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • NamedPipeClientStream и System.UnauthorizedAccessException
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • NamedPipeClientStream в С# получает сообщение «Доступ к пути запрещен», когда сервер является администратором, а клиент
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»