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

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

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

указывает на команду, выполненную как следует

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

ведет себя так, как и следовало ожидать

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

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

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

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

2 ответа2

1

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

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

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

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

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

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .