Команда Net use по-разному ведет себя в CMD и исполняется кодом через CMD

403
BlueBarren

Я пишу небольшое приложение, которое можно увидеть здесь, которое выполняет команду net.exe в cmd для добавления сетевого расположения в качестве диска. (Я только связываю свой вопрос о кодировании, если он каким-то образом связан, и кто-то хочет внести свой вклад в стеке потока).

net use z: \\PCName\d$\Folder1\Folder2

В настоящее время у меня есть проблемы с командой, выполняющейся через мое приложение, не ведёт себя как следует. Я имею в виду, что cmd указывает на то, что команда выполнена так, как должна, но на самом деле не было выполнено действие:

indicates the command executed as it should

Однако, когда я ввожу свою команду вручную, она ведет себя так, как вы ожидаете:

it behaves as you would expect

Когда я добавляю диск через приложение, ничего не добавляется, а когда я сам ввожу команду через cmd, диск появляется в проводнике Windows.

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

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

Это может быть Windows, приложение или моя сеть, вызывающая такое поведение, или это не так?

0

2 ответа на вопрос

1
Ben N

Windows работает, как задумано, и ваш код в порядке. Хитрость в том, что ваша программа работает от имени администратора, но Explorer не работает с повышенными правами. Когда ваша программа сопоставляет сетевой диск, сопоставление становится доступным для процессов в одном сеансе входа в систему, а не для учетной записи пользователя. Из MSDN :

... соединения, выполненные с помощью Microsoft LAN Manager, видны только приложениям, работающим в том же сеансе входа в систему, что и приложение, которое установило соединение. (Для включения соединения в перечисление недостаточно, чтобы приложение работало в учетной записи пользователя, создавшего соединение.)

Если вы откроете другую административную командную строку, вы увидите диск, на который была сопоставлена ​​ваша программа. Если ваша программа не была запущена с правами администратора, вы увидите ее подключенные диски в Проводнике.

Чтобы приложения без прав администратора и администратора видели один и тот же набор отображений, создайте DWORD с именем EnableLinkedConnectionsset 1внутри этого ключа ( источник ):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 

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

@BlueBarren Я полагаю, что пароль проходит между сетевым путем и ключом `/ USER`. Попробуйте `net use z: \\ server \ share пароль / USER: домен \ username`. Ben N 7 лет назад 0
Это была не команда, это было что-то еще, что я делал, не нужно беспокоиться об этом. BlueBarren 7 лет назад 0
0
Ƭᴇcʜιᴇ007

Согласно вашим скриншотам, ваша программа работает в режиме повышенных прав («от имени администратора»), а в командной строке, из которой вы запускали ее вручную, нет.

Когда вы запускаете «Администратор», он использует другой пользовательский контекст, чем обычный пользователь, поэтому подключенные диски, созданные в одном контексте, не доступны для другого.

Посмотрите этот существующий связанный вопрос SuperUser для дополнительной информации / руководства:

Только учетные данные администратора имеют права на удаленное подключение к другому компьютеру. Как в моем приложении, так и при вводе команды через CMD я предоставляю им одинаковый набор учетных данных администратора. Вы все еще сказали бы, что это вызывает проблему? BlueBarren 7 лет назад 0
Используемые учетные данные не имеют (в основном) никакого отношения к этому. Все дело в контексте, в котором выполняется процесс. Ƭᴇcʜιᴇ007 7 лет назад 0
Да, я понимаю это сейчас. Мне понравилось все объяснение @BenN, оно имело для меня большой смысл. BlueBarren 7 лет назад 0

Похожие вопросы