我已经寻找了很长一段时间,但是对于该特定问题我找不到任何可行的解决方案。我的目标是为主HoloLens应用程序创建一个后台应用程序(这意味着它必须在UWP中完成),该应用程序应该能够访问本地文件和本地网络(SMB),以便可以在其中映射文件层次结构。以便将它们中继到Unity中的主应用程序,它将以3D / 2D方式显示文件。
直到现在我已经尝试了好几种方法,包括:常规的StorageFolder / StorageFile交互(如果已经实现,那很好,因为已经实现了本地文件交互),SharpCifs.Smb和Xb.Net.SmbTree。
SharpCifs:
public SmbFile GetFile ()
{
//smb://UserName:Password@ServerIP/ShareName/Folder/FileName.txt
SmbFile file = new SmbFile ("smb:\\winAccName:password@123.45.67.11\\TestShare");
file.Connect (); // Or any file action.
return file;
}
// Exception User-Unhandled -- SharpCifs.Util.Sharpen.UnknownHostException: '..MSBROWSE__.<01>'
直到现在,我还没有成功完成与SmbFile相关的所有操作。通常我会收到错误消息,提示它无法连接到IP地址。
使用StorageFile /文件夹:
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不再被允许。我真的很感谢您的帮助,因为这当然不是我的专业领域。
问候!
答案 0 :(得分:1)
仅回答我自己的问题,就好像我解决了这个问题一样,我想总结一下我所做的事情(我还发现其中的一部分甚至是必要的,但也许只是暂时起作用。 ..无论哪种方式,这些都可能仍会提示):
->从那里开始,您将拥有基于您的计算机和Windows帐户授予的权限(至少我认为是这样)。
没有其他必要:既不需要特殊身份验证,也不需要SMB特定的库。它只能通过StorageFile / StorageFolder系统工作,并且可以使用与本地文件系统相同的方法来导航网络。
编辑:看来罪魁祸首实际上是我的“共享目标”声明。如果您声明了0个文件类型关联,或者您没有声明“ Share Target”,则它将不起作用。
另一个信息:“ broadFileSystemAccess”也非常有用,它可以减轻您对标准文件类型的限制。没有这个,您将无法获取未声明的文件和没有扩展名的文件。它有它自己的规则,请仔细阅读。
一个小提示:Visual Studio在xml中在绿色下划线,好像有一个错误,但仍然有效。