2015-10-12 9 views
15

Ich habe eine C# UWP App, die ich auf einem Raspberry PI mit Windows 10 IoT Core ausführen möchte. Das Problem, das ich habe, ist, wenn ich versuche, eine Verbindung zu einer UNC-Freigabe herzustellen, um einige Dateien zu kopieren.Zugriff auf Netzwerkfreigabe von Raspberry Pi mit IoT Core in der UWP App

Das Netzwerk ist nur ein Heimnetzwerk mit lokalen Benutzeranmeldeinformationen, Freigabe ist auf einem anderen Computer im selben Netzwerk.

Wenn Sie die App lokal ausführen, kann ich einfach await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); verwenden, um eine Verbindung mit der Freigabe herzustellen, und das funktioniert einwandfrei. Ich gehe davon aus, dass die von mir verwendeten Anmeldeinformationen auf dem lokalen Computer gespeichert sind. Bei der Ausführung auf dem RPi lautet der Fehler: "Das System kann die angegebene Datei nicht finden."

Hat jemand irgendwelche Ideen, wie ich zu diesem Antrieb in Verbindung bringen würde, ich bin Spiel für irgendetwas in diesem Stadium, um es an der Arbeit ...

Was ich habe versucht:

  1. Freigabe verfügt über Berechtigungen für alle und kann ohne Anmeldeinformationen zugegriffen werden
  2. Netzwerkfreigabe Computer-Firewall ist deaktiviert.
  3. Manifest hat die privaten Netzwerke, Enterprise-Authentifizierung und Internet (beide) Setup (vorausgesetzt, okay, da lokal funktioniert).
  4. await StorageFolder.GetFolderFromPathAsync(@"\\share\folder"); („Das System kann die angegebene Datei nicht finden.“)
  5. mithilfe von Powershell mit net use "\\share\folder" "password" /USER:"user" Arbeiten und unc sucht werden kann
  6. Versuchen WNetAddConnection2 wie in Prevent WNetAddConnection2 class which allows prohibited user to access shared folder mit
  7. Versuchte WNetUseConnection sowohl mit Benutzeraufforderung und ohne (funktioniert nicht)
  8. FolderPicker oder FileOpenPicker, aber diese scheinen für IoT Core deaktiviert zu sein (https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm).

Vielen Dank im Voraus,

Paul.

+0

Haben Sie versucht, die IP-Adresse der Remote-Maschinen im UNC-Pfad anstelle des Computernamens zu verwenden? Möglicherweise haben Sie ein Problem mit der Namensauflösung. \\ ipadresse \ sharename anstelle von \\ computername \ sharename? – BStateham

+0

Yeah versuchte IP-Adresse, wo relevant oben, zusammen mit anderen Variationen, \ c $ \ zum Beispiel. –

+0

Können Sie versuchen, die Freigabe zuerst als networkdrive zuzuweisen (z. B. über den DOS-Befehl 'net use') und dann über den lokalen Laufwerksbuchstaben darauf zuzugreifen? Ich habe kein Pi in der Nähe, um das jetzt auszuprobieren. –

Antwort

1

Haben Sie schon versucht, Identitätswechsel? Hier ist, was ich in einem meiner Projekte verwende:

[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(); 
}