所以,我一直在调查这个问题,并认为我有一个答案。
首先,对我所看到的内容进行一些解释!
在服务器 A 上,有一个共享包含指向服务器 B 上共享的符号链接:
\\serverA\Path\To\Folder
目标是
\\serverB\Folder
实际发生的是,从 is 返回的值FolderBrowserDialog.SelectedPath
,\\serverB\Folder
我错误地认为它缺少部分路径,因为字符串 serverA 和 serverB 非常相似!很抱歉误导了大家。
我在这个MSDN 示例之后创建了自己的包装器,并注意到 Shell32.dll 函数SHGetPathFromIDList
正在返回重新解析点的目标,尽管文档说
如果 pidl 参数指定了快捷方式,则 pszPath 将包含快捷方式的路径,而不是快捷方式的目标
我确实注意到之前的路径是正确的,所以在状态改变时的回调方法中,我捕获了未翻译的选定路径
private int FolderBrowserCallback(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData)
{
switch (msg)
{
case BrowseForFolderMessages.BffmSelchanged:
if (haveValidPath && !String.IsNullOrEmpty(displayedPath))
{
if (IntPtr.Zero != _hwndEdit)
{
SelectedFullPath = displayedPath;
}
}
所以SelectedFullPath
Property contains\\serverA\Path\To\Folder
和SelectedPath
property contains \\ServerB\Folder
,这让我有很多工作要做。