Как открыть файл на сетевом общем диске с помощью программы по умолчанию, используя Process.Start в .NET Core 2.1 - PullRequest
0 голосов
/ 15 февраля 2019

У меня немного недоумение.Я построил приложение для внутренней сети с функцией, которая позволяет пользователю «загружать» файл на сетевой диск.Это не проблема, хотя я могу успешно скопировать файл в указанную папку.После копирования файла по следующему требованию пользователь должен щелкнуть ссылку для вложения и открыть файл с программами по умолчанию (например, Notepad.exe для расширений .txt и т. Д.).Использование Process.Start Я успешно продемонстрировал это на своем локальном хосте, однако проблема возникает, когда приложение публикуется на хост-сервере, так как оно изначально выдало ошибку «Доступ запрещен».После настройки разрешений сетевой папки для принятия учетной записи службы и изменения идентификатора пула приложений для этой учетной записи службы больше не выдает ошибку разрешения.На самом деле это не выдает ошибку вообще.Он проходит через всю функцию, как на локальном хосте, но вместо открытия файла он, очевидно, ничего не делает.По крайней мере, мне кажется, что приложение «думает», что оно открыло программу и, следовательно, движется дальше, как будто все в порядке.Я действительно в растерянности здесь.Я явно что-то упускаю, но я не могу понять, на всю жизнь.

Это функция для открытия файла:

ActivityLog activityLog = new ActivityLog();
FileInfo fileInfo = new FileInfo(filePath);
Process process = new Process();
try
{
    if (fileInfo.Exists)
    {
        //I've used both UseShellExecute and the
        //command line arguments with the same results.

        /*
        process.StartInfo = new ProcessStartInfo
        {
            FileName = fileInfo.FullName,
            WorkingDirectory = fileInfo.DirectoryName,
            UseShellExecute = true
        };
        */

        process.StartInfo = new ProcessStartInfo("cmd", $"/c start " + fileInfo.FullName.FileStringToUri());
        process.Start();
    }
    else throw new Exception("FileInfo not found | File Path: " + filePath);
}
catch (Exception e)
{
    if (fileInfo.Exists)
        activityLog.LogErrorAsync(new Exception("File Path: " + fileInfo.FullName + " | " + e.Message, e));
    else
        activityLog.LogErrorAsync(e);
    throw e;
}

FileStringToUri() являетсяПользовательское расширение, которое по существу создает строку URI, аналогичную file://{file}/{path}, но это расширение не требуется при использовании метода UseShellExecute.

1 Ответ

0 голосов
/ 19 февраля 2019

Заключительный билет.Отвечайте, как есть, в комментариях.Спасибо @ damien-the-unbeliever

...