Разрешение отклонено для исполняемого файла в функциях Azure (C#, Linux)Linux

Ответить
Anonymous
 Разрешение отклонено для исполняемого файла в функциях Azure (C#, Linux)

Сообщение Anonymous »

Я пытаюсь запустить упакованный в один файл ffmpeg в Linux с помощью функции Azure:

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

 var ffmpeg = $"/home/site/wwwroot/ffmpeg";
var videoPath = Path.GetFullPath($"SampleVideo1.mp4");
var ffmpegCommand = $"{ffmpeg} -i \"{videoPath}\"";

using Process process = new();
process.StartInfo.FileName = "bash";
process.StartInfo.Arguments = $"-c \"{ffmpegCommand}\"";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;

process.Start();
var output = await process.StandardOutput.ReadToEndAsync();
var error = await process.StandardError.ReadToEndAsync();

await process.WaitForExitAsync();
Это должно быть общее решение, позволяющее получать выходные данные из любого исполняемого файла, а не только из ffmpeg.
Проблемы, с которыми я столкнулся:
  • Использование сценария/исполняемого файла напрямую (без bash) с UseShellExecute = false приводит к ошибке отказа в разрешении (при использовании Process.Start() сообщается, что разрешение отклонено)
  • Использование сценария/исполняемого файла напрямую с UseShellExecute = true приводит к невозможности получения выходных данных/данных об ошибках из процесса.
Что мне нужно, так это иметь возможность запускать скрипт/исполняемый файл и получать его выходные данные. Я нашел решение, позволяющее использовать bash без отказа в разрешении, запустить целевой файл с параметром -c, UseShellExecute = false, и я смогу получить его выходные данные.
В качестве дополнительного решения я пытаюсь запустить bash с UseShellExecute = true и сохранить вывод в файл с помощью -c "commandhere > somefile.txt.
В обоих случаях я получаю сообщение об ошибке:

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

bash: line 1: /home/site/wwwroot/ffmpeg: Permission denied\n
Я пробовал упомянутые ранее комбинации, тоже пробовал

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

 var chmodStartInfo = new ProcessStartInfo
{
FileName = "chmod",
Arguments = $"+x {ffmpegPath}",
RedirectStandardOutput = false,
RedirectStandardError = false,
UseShellExecute = true,
CreateNoWindow = true
};

using (var chmodProcess = new Process { StartInfo = chmodStartInfo })
{
chmodProcess.Start();
await chmodProcess.WaitForExitAsync();
}
перед процессом bash, но в результате возникает та же проблема с отказом в разрешении.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ns-c-linux
Ответить

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

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

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

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

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