Программирование сетевых дисков в Windows 10

Я поддерживаю утилиту сопоставления дисков, где я работаю. Единственная реальная цель - подключить сетевые диски. Он существует уже некоторое время и обновлялся годами по мере обновления операционных систем. Код для сопоставления дисков:

    Process prMapDrive;
    prMapDrive = new Process();

    prMapDrive.StartInfo.UseShellExecute = true;
    prMapDrive.StartInfo.FileName = "cmd.exe";
    prMapDrive.StartInfo.Arguments = string.Format(@"/C net use {0} {1} /persistent:{2}", sDrive, sPath, fPersist ? "Yes" : "No");
    prMapDrive.StartInfo.CreateNoWindow = true;
    prMapDrive.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    prMapDrive.Start();
    prMapDrive.WaitForExit(); 
    prMapDrive.Close();

    prMapDrive.StartInfo.Verb = "runas";
    prMapDrive.Start();
    prMapDrive.WaitForExit();
    prMapDrive.Close();

Этот код прекрасно работает на компьютерах с Windows 7, и у меня нет претензий. Жалобы приходят, когда люди используют его в Windows 10. При запуске в Windows 10 диски не видны. Я добавил следующую строку кода, чтобы проверить наличие диска:

    return Directory.Exists(sDrive);

Это возвращает True, но когда я вхожу в проводник, я не вижу диск. Если я перейду в DOS и проверим наличие диска, net useЯ не вижу этого. Таким образом, несмотря на то, что Directory.Exists возвращает True, я не вижу подключенных дисков. Это, похоже, не дает сбоя, и я полагаю, что на каком-то уровне это не так. В противном случае Directory.Exists не вернул бы True.

Что еще хуже, это более новая версия старой утилиты VB.NET. Эта утилита работает, по крайней мере, для меня, хотя есть некоторые жалобы, что она не работает. Код VB.NET для этого:

  Dim prMapDrive As Process
  prMapDrive.StartInfo.UseShellExecute = True
  prMapDrive.StartInfo.FileName = "cmd.exe"
  prMapDrive.StartInfo.Arguments = String.Format("/C net use {0} {1} /persistent:{2}", sDrive, sPath, _
                                                 If(fPersist, "Yes", "No"))

  prMapDrive.StartInfo.CreateNoWindow = True
  prMapDrive.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

  prMapDrive.Start()
  prMapDrive.WaitForExit()
  prMapDrive.Close()

  prMapDrive.StartInfo.Verb = "runas"

  prMapDrive.Start()
  prMapDrive.WaitForExit()
  prMapDrive.Close()

  Return Directory.Exists(sDrive)

Я не вижу никакой разницы между этими двумя, кроме того факта, что они используют разные языки программирования.

Просматривая реестр в Windows 7, я вижу диски, подключенные под HKCU\Network. Когда я смотрю на машину с Windows 10, я не вижу подключенных дисков. Так что это одно отличие.

Другое отличие - если я использую командную строку с повышенными правами, тогда я могу видеть диски, использующие сетевое использование, и могу получить к ним доступ через DOS.

Таким образом, похоже, что диски сопоставляются и могут быть доступны из командной строки с повышенными правами.

Что мне не хватает? Есть ли другой способ, которым я должен справиться с этим? Раньше я использовал WNetAddConnection, но перестал использовать его в Windows 10, потому что это, похоже, не работает.

0 ответов

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