如何在运行UWP应用的Raspberry Pi上访问网络共享

18
我有一个使用c#编写的UWP应用程序,我想在运行Windows 10 IoT Core的Raspberry PI上运行此应用程序。问题是当我尝试连接到UNC共享来复制一些文件时遇到了问题。
本地网络只是一个具有本地用户凭据的家庭网络,共享位于同一网络上的另一台计算机上。
当在本地运行应用程序时,我可以使用await StorageFolder.GetFolderFromPathAsync(@"\\share\folder")连接到共享文件夹,这很有效,我认为这是因为我使用的凭据已保存在本地计算机上。但是,在RPi上运行时,收到的错误是:“系统找不到指定的文件”。
我尝试过以下方法:
  1. 共享文件夹已经开放了"everyone"权限,无需输入凭证即可访问
  2. 网络共享计算机上的防火墙被关闭。
  3. 清单已设置为 "private networks", "enterprise auth", and "Internet (both)"(在本地工作正常,所以我认为设置正确)。
  4. await StorageFolder.GetFolderFromPathAsync(@"\\share\folder");("系统找不到指定的文件")
  5. 使用带密码的PowerShell和net use "\\share\folder" "password" /USER:"user"可以解决并且可以浏览UNC
  6. 尝试使用WNetAddConnection2,例如Prevent WNetAddConnection2 class which allows prohibited user to access shared folder
  7. 尝试使用带用户提示和不带用户提示的WNetUseConnection(均无法正常工作)
  8. FolderPicker 和 FileOpenPicker,但这些在IoT Core中似乎被禁用了 (https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm)。
请问有人有任何想法该如何连接到此共享驱动器? 我现在可以接受任何解决方法以使其正常工作。

保罗。


你尝试过使用远程计算机的IP地址作为UNC路径而不是计算机名称吗? 你可能遇到了名称解析问题。尝试使用 \ipaddress\sharename 而不是 \computername\sharename。 - BStateham
是的,我已经尝试了IP地址以及其他变体,例如\c$。 - Paul Charlton
你可以先尝试将共享映射为网络驱动器(例如通过dos命令net use),然后通过本地驱动器字母访问它吗?我现在身边没有树莓派来测试。 - Tom Wuyts
我肯定当时已经尝试过了,但现在很想再试一次。 - Paul Charlton
我也对这个感兴趣。你解决了这个问题吗? - Panda
很抱歉,我已经离开了,并使用谷歌驱动器的API从其源文件中获取了文件。 - Paul Charlton
1个回答

1

你尝试过模拟身份吗?以下是我在一个项目中使用的代码:

[DllImport("advapi32.dll", SetLastError = true)]            
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

private void Impersonate(Enum domainName, string userName, string password)
{
    IntPtr _tokenHandle = IntPtr.Zero;
    int Logon32_Provider_Default = 0;
    int Logon32_Logon_Interactive = 2;

    bool userSuccess = LogonUser(userName, domainName.ToString(), password, Logon32_Logon_Interactive, Logon32_Provider_Default, ref _tokenHandle);

    if (!userSuccess)
    {
        throw new Win32Exception(Marshal.GetLastWin32Error());
    }

    WindowsImpersonationContext _impersonatedUser = new WindowsIdentity(_tokenHandle).Impersonate();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接