我正在编写一个可以看到的小应用程序这里在 cmd 中执行 net.exe 命令以将网络位置添加为驱动器。(我仅链接我的编码问题,以防它以某种方式相关并且有人想在 stackoverflow 上做出贡献。)
net use z: \\PCName\d$\Folder1\Folder2
我目前遇到一个问题,即通过我的应用程序执行的命令没有按应有的方式运行。我的意思是 cmd 指示命令按应有的方式执行,但实际上并未发生操作:
但是,当我手动输入命令时,它的行为正如您预期的那样:
当我通过我的应用程序添加驱动器时,没有任何内容添加,而当我通过 cmd 自己输入命令时,驱动器会出现在 Windows 资源管理器中。
起初我以为这可能是一个编码问题,但在努力解决这个问题之后,我认为我的应用程序相当健全。现在我的想法是,这可能是 Windows 或其他应用程序的行为异常。
值得注意的是,我的工作地点有很多网络策略和安全,但是我确实有访问和驱动器的权限。
可能是 Windows、应用程序或我的网络导致了这种行为,或者事实并非如此?
答案1
Windows 按照设计运行,您的代码也很好。问题在于您的程序以管理员身份运行,但 Explorer 未以管理员身份运行。当您的程序映射网络驱动器时,该映射可供同一登录会话中的进程使用 - 而不是用户帐户。从微软:
...使用 Microsoft LAN Manager 建立的连接仅对在与建立连接的应用程序相同的登录会话中运行的应用程序可见。 (要将连接包括在枚举中,仅让应用程序在创建连接的用户帐户中运行是不够的。)
如果您打开另一个管理命令提示符,您将看到程序映射的驱动器。如果您的程序未以管理员身份运行,您将在资源管理器中看到其映射的驱动器。
为了使非管理员应用程序和管理应用程序看到相同的映射集,请在此键内创建一个名为EnableLinkedConnections
set to 的DWORD(1
来源):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
一旦您重新启动,您的提升程序将会产生未提升的其他应用程序可以看到的共享。
答案2
根据您的屏幕截图,您的程序正在以提升模式(“以管理员身份”)运行,而您手动运行的命令提示符则不是。
当您以“管理员身份”运行时,它使用与普通用户不同的用户上下文,因此在一个上下文中创建的映射驱动器对另一个上下文不可用。
请参阅此现有的相关超级用户问题以获取更多信息/指导: