我在使用Delphi程序写入Windows 7中的映射网络驱动器(P :)时遇到了一些问题。例如,当我尝试ForceDirectories('P:\test\folder')
时,我收到错误(未找到路径)。
我尝试在代码(ForceDirectories('\\computername\share\test\folder')
)中键入UNC路径,这样可行。但是,ExpandUNCFileName('P:\')
似乎不起作用;它返回'P:\'。
在Windows XP上,ExpandUNCFileName('P:\')
返回UNC路径。
如何在Windows 7上获取Delphi中的UNC路径,或以其他方式写入映射的网络驱动器?
经过进一步调查,就好像我在Windows中缺少某种初始化。我有另一个使用TcxShellComboBox
(DevExpress组件)的应用程序(app2)。在组合框中导航到P:后,在app2中,ExpandUNCFileName
的调用在第一个应用程序中正常工作。与P:下的文件的FileExists
相同,在app2中导航到P:之前返回False,在计算机重新启动之后返回true。
答案 0 :(得分:10)
根据Microsoft KB Article,如果启用了“用户帐户控制”,并且从Windows资源管理器(非提升)映射网络驱动器,则提升的程序将无法访问该驱动器。引用:
如果用户登录到Windows Vista或Windows 7,并且启用了用户帐户控制,则使用用户的过滤访问令牌的程序和使用用户的完全管理员访问令牌的程序可以同时运行时间。由于LSA在两个单独的登录会话期间创建了访问令牌,因此访问令牌包含单独的登录ID。
映射网络共享时,它们会链接到当前进程访问令牌的当前登录会话。这意味着,如果用户将命令提示符(Cmd.exe)与筛选的访问令牌一起使用以映射网络共享,则不会为使用完全管理员访问令牌运行的进程映射网络共享。
由于您在评论中提到您运行Delphi“以管理员身份”(提升),这是您的问题。
<强>解决方案:强>
如果您不需要,请不要运行Delphi。如果确实需要升级软件,请将其分为两部分(提升和非提升),并从第一部分访问映射的网络驱动器。然后使用提升的COM对象访问其他部分,或者只是执行单独的可执行文件。
从提升的网络提示中映射网络驱动器,以便高架用户可以使用映射的网络驱动器:
一个。打开提升的命令提示符(以管理员身份运行“cmd.exe”)
湾输入net use p: \\computername\share\test\folder