【发布时间】:2018-06-19 14:39:36
【问题描述】:
我现在正在寻找很长一段时间,但我找不到任何有效的解决方案来解决这个特定问题。我的目标是为主 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 地址的错误消息。
使用存储文件/文件夹:
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:\”访问的本地文件夹。还设置了文件类型关联。
我听到很多 cmets 说 UWP 不支持 SMB,但我听到 cmets 说有人让它工作(虽然这对我不起作用)。我还听说不再允许使用 SMB 1。如果能提供任何帮助,我将不胜感激,因为这当然不是我的专业领域。
您好!
【问题讨论】:
-
你能分享更多关于 smb 个人资料的细节吗?
-
问题自行解决。这是一个愚蠢的错误,尽管我不确定。最近几天我可能只使用了通往 IP 的路径,我在其中进行了更改,可能附带解决了问题。
标签: uwp share file-permissions smb