Использование длинных путей (>260) с.net 4.6.2 в службе Windows

У меня есть код, который начал выдавать исключение: TooLongPathException. Поэтому я провел некоторое исследование и обнаружил, что.net 4.6.2 решает эту проблему. Большой!

Неудачный код - это код, который перемещает и копирует папки в разные папки. Я хотел бы использовать.net 4.6.2 framework, чтобы этот код использовал более длинные пути, поэтому мне не нужно кодировать какое-то обходное решение.

Я установил.net 4.6.2 Framework на машине. Машина работает под управлением Windows Server 2008 R2 SP1. Я сделал проект целевой 4.6.2 фреймворк, но все равно он выдает эту ошибку.

Я не уверен, что мне здесь не хватает.

Кто-нибудь использовал.net 4.6.2 для аналогичной вещи, которая может указать мне, что мне нужно делать?

1 ответ

После миллиона тестов я могу подтвердить, что это работает с.Net 4.6.2 на Windows10, но не работает на Server 2012r2.

Когда я хочу удалить длинную папку, которую я создал с помощью Windows10 на общем ресурсе, Сервер не может удалить ее. Мой обходной путь - старомодная Робокопия.

public static void DirectoryDeleteRobocopy(string a_strPath)
    {
        _log.Debug("DirectoryDeleteRobocopy called: " + a_strPath);
        string strTmpDir = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        var emptyDirectory = new DirectoryInfo(strTmpDir + "\\TempEmptyDir_" + Guid.NewGuid());
        try
        {
            emptyDirectory.Create();
            using (var process = new Process())
            {
                process.StartInfo.FileName = "robocopy.exe";
                process.StartInfo.Arguments = "\"" + emptyDirectory.FullName + "\" \"" + a_strPath + "\" /e /purge";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.Start();
                process.WaitForExit();
            }
            emptyDirectory.Delete();
            new DirectoryInfo(a_strPath).Attributes = FileAttributes.Normal;
            Directory.Delete(a_strPath);
        }
        catch (IOException) { }
    }

Я думаю, что Microsoft должна сделать политику "Включить длинные пути Win32" доступной для Server 2012 (и, возможно, даже 2008) как можно скорее. Извините, но сейчас это выглядит плохо.

Другие вопросы по тегам