2

我收到了客户的错误报告。我的程序使用Delphi的选择目录功能,让他选择程序使用的几个目录,允许在网络驱动器上。以下是错误报告中的相关摘录:

尝试更改目录时,网络驱动器未显示在对话框中。在浏览菜单中打开“计算机”时,仅显示本地驱动器。迂回的解决方案是让对话框保持打开状态,断开网络驱动器,然后重新连接网络驱动器。然后它会出现在对话框中。更改下一个文件夹位置时,必须重新进行。我发现主要技术人员经常这样做,因为它似乎正在重置。

起初我以为这一定是 Windows 没有拾取目录,所以我让他检查两台计算机(客户端和带有网络驱动器的计算机)上的网络位置是否设置为工作,以检查驱动器是否正常映射到客户端,检查网络发现是否已打开,并检查他是否可以在资源管理器中看到驱动器正常。他做到了,但错误仍然存​​在。

我没有在谷歌或 QC 报告中发现任何与此相关的信息,SelectDirExtOpts 的文档似乎表明网络驱动器应该“正常工作”。

所以我的问题是:以前有没有人遇到过类似的事情?可能是 Windows 问题,还是 Delphi 问题?

非常感谢。

4

2 回答 2

4

只要您包含该sdShowShares标志,它确实应该可以工作。

如果您查看SelectDirectory函数的源代码,您会发现它只不过是设置SHBrowseForFolder和读取结果而已。

SHBrowseForFolder是一个 Windows Shell API 函数:

function SHBrowseForFolder; external shell32 name 'SHBrowseForFolderW';

Delphi 必须正确解释它返回的结果SHBrowseForFolder,因为驱动器在重新连接后正确显示。所以我会说这是客户端机器上的 Windows 问题。

于 2012-11-15T07:19:35.793 回答
0

然而, DelphiSelectDirectory是一个包装器SHBrowseForFolder- 应该注意的是,该SelectDirectory函数不显示XE2 和更早版本上的 Delphi/C++ Builder 版本的映射网络驱动器,看起来如此。在较新的版本上,它似乎可以正常工作并显示共享网络驱动器。

下面的代码应该适用于所有较新版本的 Delphi:

AOptions := [sdNewUI, sdShowShares];
Result := SelectDirectory(Caption, Root, Directory, AOptions, nil);

较旧的 Delphi/C++ Builder 版本的用户可能希望SHBrowseForFolderW直接调用。可以在以下位置找到一些示例代码:https ://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shbrowseforfolderw

于 2020-02-03T13:24:55.683 回答