【问题标题】:How to access Network Share from Raspberry Pi running IoT Core in UWP app如何在 UWP 应用程序中从运行 IoT Core 的 Raspberry Pi 访问网络共享
【发布时间】:2016-01-10 11:53:40
【问题描述】:

我有一个 c# UWP 应用程序,打算在带有 Windows 10 IoT Core 的 Raspberry PI 上运行。我遇到的问题是当我尝试连接到 UNC 共享以复制一些文件时。

该网络只是具有本地用户凭据的家庭网络,共享位于同一网络上的另一台计算机上。

在本地运行应用程序时,我可以使用await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); 连接到共享,这工作正常,我假设这是因为我使用的凭据保存在本地计算机上。在 RPi 上运行时收到的错误是:“系统找不到指定的文件。”

有没有人对我将如何连接到这个驱动器有任何想法,我在这个阶段想要让它工作......

我尝试过的:

  1. Share 对所有人都有权限,无需凭据即可访问
  2. 网络共享计算机防火墙已关闭。
  3. 清单具有专用网络、企业身份验证和 Internet(两者)设置(假设可以在本地工作)。
  4. await StorageFolder.GetFolderFromPathAsync(@"\\share\folder");("系统找不到指定的文件。")
  5. 使用带有net use "\\share\folder" "password" /USER:"user" 的powershell 可以工作,并且可以浏览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)。

提前致谢,

保罗。

【问题讨论】:

  • 您是否尝试过在 UNC 路径中使用远程计算机 IP 地址而不是计算机名称?您可能遇到名称解析问题。 \\ipaddress\sharename 而不是 \\computername\sharename ?
  • 是的,尝试了上面相关的 ip 地址,以及其他变体,例如 \c$\。
  • 您可以尝试先将共享映射为网络驱动器(例如通过 dos-command net use),然后通过其本地驱动器号访问它吗?我现在没有附近的 Pi 来测试它。
  • 我确定我当时尝试过,但我很想再试一次
  • 我对此也很感兴趣。你设法解决了这个问题吗?

标签: c# uwp raspberry-pi2 unc windows-10-iot-core


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2010-09-06
    • 2012-12-23
    相关资源
    最近更新 更多