Как получить действительный путь UN C для пользователей (НЕ tsclient) из папки папок браузера, когда они используют RemoteApp? - PullRequest
0 голосов
/ 01 мая 2020

Я настраиваю программу, которая будет импортировать файлы с компьютера пользователя в одночасье на центральный сервер. Пользователи получают доступ к программе из RemoteApp на основе сервера. Когда папкаBrowserDialog открывается и пользователь выбирает что-то из папки «Документы», я использовал приведенный ниже код, чтобы получить путь UN C компьютера пользователя. Проблема в том, что, поскольку они подключаются через RemoteApp, он всегда возвращает tsclient как root. Это не принесет мне пользы, когда я попытаюсь запустить программу, которая импортирует файлы в одночасье. И я не всегда могу предположить, что они всегда будут выбирать папку в папке своих пользователей. Это может быть где угодно.

Как мне получить имя их компьютера или хотя бы путь, который будет иметь смысл для импортера?

        private static String GetUNCPath(String path)
        {
            path = path.TrimEnd('\\', '/') + Path.DirectorySeparatorChar;
            DirectoryInfo d = new DirectoryInfo(path);
            String root = d.Root.FullName.TrimEnd('\\');

            if (!root.StartsWith(@"\\"))
            {
                ManagementObject mo = new ManagementObject();
                mo.Path = new ManagementPath(String.Format("Win32_LogicalDisk='{0}'", root));

                // DriveType 4 = Network Drive
                if (Convert.ToUInt32(mo["DriveType"]) == 4)
                    root = Convert.ToString(mo["ProviderName"]);
                else
                    root = @"\\" + System.Net.Dns.GetHostName() + "\\" + root.TrimEnd(':') + "$\\";
            }

            return Recombine(root, d);
        }

        private static String Recombine(String root, DirectoryInfo d)
        {
            Stack s = new Stack();
            while (d.Parent != null)
            {
                s.Push(d.Name);
                d = d.Parent;
            }

            while (s.Count > 0)
            {
                root = Path.Combine(root, (String)s.Pop());
            }
            return root;
        }
...