Comando de uso de rede se comportando de maneira diferente no CMD versus sendo executado por código por meio do CMD

0

Estou codificando um pequeno aplicativo que pode ser visto aqui que executa um comando net.exe no cmd para adicionar um local de rede como uma unidade. (Eu só estou ligando a minha questão de codificação caso ela se relacione de alguma forma e alguém queira contribuir com o stackoverflow.)

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

Atualmente estou tendo problemas com o comando executando através do meu aplicativo não se comportando como deveria. Com isso, quero dizer que cmd indica que o comando foi executado como deveria, mas a ação realmente não ocorreu:

Noentanto,quandoeuinsiromeucomandomanualmente,elesecomportacomovocêesperaria:

Quando eu adiciono drive através da minha aplicação, nada é adicionado e quando eu insiro o comando através do cmd, a unidade aparece no Windows Explorer.

No começo eu pensei que poderia ser um problema de codificação, mas depois de lutar com o problema, acho que meu aplicativo é bastante sólido. Agora estou na linha de pensamento que pode ser o Windows ou outro aplicativo se comportando de maneira estranha.

Pode valer a pena notar que estou no trabalho onde há muita política e segurança de rede, mas tenho permissão para acessar e direcionar.

Poderia ser o Windows, um aplicativo ou minha rede causando esse comportamento ou não deveria ser esse o caso?

    
por BlueBarren 22.12.2016 / 20:35

2 respostas

1

O Windows está funcionando como projetado e seu código está bem. O truque é que o seu programa está sendo executado como administrador, mas o Explorer não está em execução. Quando o programa mapeia a unidade de rede, o mapeamento é disponibilizado para processos na mesma sessão de logon - não conta de usuário. De MSDN :

...connections made using Microsoft LAN Manager are visible only to applications running in the same logon session as the application that made the connection. (To include the connection in the enumeration, it is not sufficient for the application to be running in the user account that created the connection.)

Se você abrir outro prompt de comando administrativo, verá a unidade que seu programa mapeou. Se o seu programa não estivesse sendo executado como administrador, você veria suas unidades mapeadas no Explorer.

Para fazer com que aplicativos não-admin e admin vejam o mesmo conjunto de mapeamentos, crie uma DWORD chamada EnableLinkedConnections definida como 1 dentro dessa chave ( origem ):

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

Depois de reiniciar, seu programa elevado fará compartilhamentos que seus outros aplicativos não elevados poderão ver.

    
por 22.12.2016 / 20:50
0

De acordo com suas capturas de tela, seu programa está sendo executado no modo elevado ("como administrador"), onde, como o prompt de comando, você o executou manualmente a partir do não.

Quando você executa as coisas "Como administrador", ele usa um contexto de usuário diferente do seu usuário normal, portanto, unidades mapeadas criadas em um contexto não estão disponíveis para o outro.

Veja essa pergunta sobre o Superusuário relacionada existente para obter informações / orientações adicionais:

por 22.12.2016 / 20:43