Игра запускает 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.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 позволит кому угодно и чему угодно получить доступ к каналу).
Есть ли что-то, что я упустил из виду? Неужели нет возможности подключиться к каналу без прав администратора?
Обновить
Для справки: исполняемый файл игры сначала запускается из программы 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 не необходим ни на каком этапе процесса.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ithout-uac