我现在正在寻找很长一段时间,但我找不到针对这个特定问题的任何有效解决方案。我的目标是为主 HoloLens 应用程序创建一个后台应用程序(这意味着它必须在 UWP 中完成),它应该能够访问本地文件和本地网络 (SMB),以便它可以映射文件层次结构为了将它们转发到 Unity 中的主应用程序,该应用程序将以 3D/2D 方式显示文件。
到目前为止,我尝试了几件事,包括:常规 StorageFolder/StorageFile 交互(如果这能起作用那就太好了,因为本地文件交互已经实现)、SharpCifs.Smb 和 Xb.Net.SmbTree。
夏普Cif:
public SmbFile GetFile ()
{
//smb://UserName:Password@ServerIP/ShareName/Folder/FileName.txt
SmbFile file = new SmbFile ("smb:\\winAccName:[email protected] /cdn-cgi/l/email-protection\\TestShare");
file.Connect (); // Or any file action.
return file;
}
// Exception User-Unhandled -- SharpCifs.Util.Sharpen.UnknownHostException: '..MSBROWSE__.<01>'
到目前为止,我还没有成功地对与 SmbFile 相关的所有内容进行任何操作。通常我会收到无法连接到 IP 地址的错误消息。
使用存储文件/文件夹:
async public void OpenFile ()
{
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync ("\\\\ServerName.local");
if (folder != null) CreateMessage ("Got the folder: " + folder.Name);
StorageFile file = await folder.GetFileAsync ("abc.txt");
CreateMessage ("Success: " + file.Path);
}
// Exception User-Unhandled -- System.Runtime.InteropServices.COMException: 'Error HRESULT E_FAIL has been returned from a call to a COM component.'
后者成功获取了该文件夹,但未能对其执行任何操作。但这是迄今为止我能达到的最远距离。我还启用了以下功能:
<Capabilities>
<Capability Name="internetClientServer" />
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<uap:Capability Name="sharedUserCertificates" />
<uap:Capability Name="enterpriseAuthentication" />
<DeviceCapability Name="proximity" />
</Capabilities>
我假设我遇到了权限问题,我想知道为什么 SmbTree / SmbFile 交互始终需要用户名和密码,而 StorageFile/StorageFolder 交互不需要它(因此失败?)。我发现必须添加这些功能...但这并不是所需要的全部。文件选择器也只是解决本地文件权限问题的解决方案,但不能成为网络的解决方案(客户端不允许自己访问主机上的文件)。另外,对于 HoloLens,我不能依赖文件选择器,因为它目前没有。不管怎样,选择器似乎仍然可以工作,如果我可以创建一个自定义文件选择器,那也将是一个可接受的解决方案......如果可能的话。
Ps:我还尝试以管理员身份运行 Visual Studio。并且还设置了共享文件夹权限(即使对于访客)。当前共享文件夹是可通过“A:\”访问的本地文件夹。还设置文件类型关联。
我听到很多评论说 UWP 不支持 SMB,但我听到了有关使其工作的人的评论(尽管这对我来说不起作用)。我还听说 SMB 1 不再被允许了。我非常感谢任何帮助,因为这肯定不是我的专业领域。
问候!