Игра запускает NamedPipeServerStream и ждет, пока клиент подключится и отправит данные:< /p>
Код: Выделить всё
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.In, 1,
PipeTransmissionMode.Message, PipeOptions.Asynchronous,
8192, 8192, pipeSecurity);
try
{
await pipe.WaitForConnectionAsync(cancellationTokenSource.Token);
}
Код: Выделить всё
using NamedPipeClientStream pipeClient = new(".", PIPE_NAME,
PipeDirection.Out, PipeOptions.Asynchronous);
try
{
pipeClient.Connect(PIPE_TIMEOUT);
}
В противном случае PipeClient.Connect выдает исключение UnauthorizedAccessException: Access путь запрещен.
Я не могу, чтобы мое приложение запрашивало UAC каждый раз, когда используется глубокая ссылка! Судя по общедоступному моно-репозиторию, это соответствует строке UnauthorizedAccess_IODenied_NoPathName, но я проверил, и PIPE_NAME правильные.
Сначала я подумал, что это так. из-за того, что Deeplink.exe находится в папке C:/Program Files, рядом с программой Unity, но нет, проблема сохраняется даже при попытке запустить ее с рабочего стола. Вместо этого я попытался использовать PipeAccessRights.FullAccess, но и здесь безуспешно.
Поскольку UAC — единственная разница между тем, работает он или нет, я должен предположить, что проблема связана с разрешениями (хотя я ожидал, что WorldSid позволит кому угодно и чему угодно получить доступ к каналу).
Использование PipeClient.ConnectAsync еще хуже, это просто застревает в ожидании навсегда, даже с тайм-аутом в 1000 мс и независимо от того, был ли запущен от имени администратора или нет.
Есть ли что-то, что я упустил из виду? Неужели нет возможности подключиться к каналу без прав администратора?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ithout-uac