none
File.copy Zugriff verweigert RRS feed

  • Frage

  • Hallo

    IIS 7.5 ASP.NET 4, vb

    ich möchte auf meinem lokalen System mit

     System.IO.File.Copy(FileToCopy, NewCopy, True)

     eine Datei in eine Netzwerkfreigabe auf einem anderen PC kopieren.

     Über den WWD integrierten Server funktioniert das, wenn ich es allerdings über den localhost probiere, bekomme ich die Meldung, dass der Zugriff verweigert wurde.
     Ich weiß jetzt allerdings nicht, welche Berechtigungen ich nun wo einfügen muss.

     Nach etwas Suchen habe ich gelesen, dass ich den Benutzer ASPNET hinzufügen muss. Aber der existiert weder als Benutzer noch als Gruppe.

     Ich bin für jeden Tipp dankbar.


    Liebe Grüße, die Luzie!


    • Bearbeitet Luzie Mittwoch, 22. August 2012 09:30
    Mittwoch, 22. August 2012 09:28

Antworten

  • Hallo Luzie,

    Du kannst in den erweiterten Einstellungen des Application Pools angeben, mit welchem Benutzeraccount dieser ausgeführt wird.

    IIS MMC
     -> Anwendungspools
       -> <Anwendungspool auswählen>
         -> Erweiterte Einstellungen...
           -> Abschnitt "Prozessmodell"
             -> Eintrag "Identität"

    Dort wechselst Du dann auf "Benutzerdefiniertes Konto" und gibst die Daten des neuen Benutzeraccounts an.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Luzie Freitag, 31. August 2012 19:01
    Mittwoch, 22. August 2012 20:38
    Moderator

Alle Antworten

  • Hallo Luzie,

    der integrierte ASP.NET Entwicklungswebserver ist eine normale Anwendung, die unter deinem Benutzeraccount läuft. IIS ist ein Dienst und läuft daher mit einem anderen Account, meist mit weniger Rechten. Dazu kommt, dass jeder Application Pool im IIS mit einem anderen Benutzeraccount ausgeführt werden kann.

    Die Problematik ist, dass der Account, der für den entsprechenden Application Pool zuständig ist, mit identischen Angaben (Name, Passwort) auch auf dem Rechner eingerichtet werden muss, der die Freigabe enthält, wenn die Freigabe nicht für "Jeder" mit Schreibrechten versehen ist. Eine weitere Problematik ist dabei aber, dass "Jeder" nicht jeder ist. Der Account NETZWERKDIENST bzw. NETWORK SERVICE gehört bspw. nicht dazu.

    Daher wäre es fürs testen das sinnvollste, den Application Pool mal kurzzeitig mit deinem Benutzeraccount laufen zu lassen. Einstellen kannst Du das über die IIS Management Konsole und dort im Node "Application Pools" bzw. "Anwendungspools".

    Wenn das dann klappt, schauen wir weiter.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 22. August 2012 09:38
    Moderator
  • Daher wäre es fürs testen das sinnvollste, den Application Pool mal kurzzeitig mit deinem Benutzeraccount laufen zu lassen. Einstellen kannst Du das über die IIS Management Konsole und dort im Node "Application Pools" bzw. "Anwendungspools".

    Hallo Stefan

    Die Rechte sind bei allen Freigaben sind auf "jeder" gesetzt, der hat den Vollzugriff.

    Der Anwendungspool ist der DefaultAppPool und die Identät LocalSystem.
    Unter den erweiterten Einstellungen kann ich im Bereich:

    Anmeldeinformationen für den physikalischen Pfad einen "bestimmten Benutzer" eingeben. Voreingestellt ist Anwendungsbenutzer (Pass-Trough-Authentifizierung)

    Verstehe ich das jetzt richtig, muss ich unter bestimmten Benutzer meinen eigenen Benutzer, also den meines Laptops dort einfügen?

    Oder ich gebe den Benutzer meines Laptops an jedem PC ein und gebe ihm unter Freigabe den Vollzugriff?


    Liebe Grüße, die Luzie!

    Mittwoch, 22. August 2012 14:48
  • Hallo Luzie,

    "LocalSystem" hat, wie der Name schon sagt, nur Zugriff aufs lokale System und kann nicht ins Netzwerk. Netzwerkdienst geht auch nicht, da der Account Netzwerkdienst eben nicht "Jeder" ist. Daher würde ich vorschlagen, Du legst einen neuen Benutzeraccount auf dem Rechner an, auf dem der IIS liegt. Dem neuen Account ordnest Du der Benutzergruppe IIS_IUSRS zu und verwendest den Account als ausführenden Account für den Application Pool. (Du solltest dann aber ggfs. einen eigenen Application Pool für deine Anwendung anlegen)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 22. August 2012 15:44
    Moderator
  • Hallo Stefan

    Ich habe jetzt einen neuen Benutzer angelegt. Der Benutzer heißt z.B. xyz. Diesen Benutzer haben ich der Gruppe IIS_Users zugeordnet. Soweit habe ich es verstanden.

    Aber was meinst Du damit "..und verwendest den Account als ausführenden Account für den Application Pool".?

    Ich habe jetzt mal testweise einen neuen Application Pool mit dem gleichen Namen des Benutzers angelegt und der virtuellen Webanwendung zugewiesen. Was evtl. auch Quatsch ist. Ich kann es allerdings erst Montag im Netzwerk selbst testen.


    Liebe Grüße, die Luzie!

    Mittwoch, 22. August 2012 19:22
  • Hallo Luzie,

    Du kannst in den erweiterten Einstellungen des Application Pools angeben, mit welchem Benutzeraccount dieser ausgeführt wird.

    IIS MMC
     -> Anwendungspools
       -> <Anwendungspool auswählen>
         -> Erweiterte Einstellungen...
           -> Abschnitt "Prozessmodell"
             -> Eintrag "Identität"

    Dort wechselst Du dann auf "Benutzerdefiniertes Konto" und gibst die Daten des neuen Benutzeraccounts an.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Luzie Freitag, 31. August 2012 19:01
    Mittwoch, 22. August 2012 20:38
    Moderator
  • Hallo Stefan,

     

    Beim letzten PC schreibt er mir (nicht immer) einen Fehler: Netzwerkname nicht gefunden. Wobei die Fehler doch abgefangen werden sollte. Aber ob Fehlermeldung oder nicht, er findet den PC nicht.

    Protected Function myPing(ByVal s As String) As Boolean
            Try
                Dim ping As Ping = New Ping()
                Dim pingreply As PingReply = ping.Send(s, 1000)
                If pingreply.Status = IPStatus.Success Then
                    Return True
                Else
                    Return False
                End If
    
            Catch
                Return False
            End Try
    
     End Function
     
      Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
             Dim i As Int16
             Dim result As String = ""
             Dim u = New String() {"pc01", "pc03", "pc02", "pc04"}
             Dim fileHilfe As String = "c:\hilfe\pts.chm"
             For i = LBound(u) To UBound(u)
                 If myPing(u(i)) Then
                     Select Case rdAuswahl.SelectedValue
                         Case "0"
                             cFile(fileHilfe, "\\" & u(i) & "\winptsG\pts.chm")
                             result += "kopiert \\" & u(i) & "\winptsG\pts.chm<br/>"
                         Case "1"
                             result += "kopiert \\" & u(i) & "\winptsG\winptsPGM.accdb<br/>"
                         Case "2"
                             result += "kopiert \\" & u(i) & "\wdStartup\mod_Addin.dotm<br/>"
                         Case Else
                             result = ""
                     End Select
     
                 Else
                     result += "nicht vorhanden " & u(i) & "<br/>"
                 End If
     
             Next
             lblStatus.Text = result
        End Sub
            

     Wenn ich es allerdings über eine Batch-Datei abfrage, wird das Netzwerk gefunden.

        @echo off
        ping /n 1 dummipc /w 130 > nul
        if %errorlevel%==0 (
        echo success
        ) else (
        echo fail
        )
        ping /n 1 PC04 /w 130 > nul
        if %errorlevel%==0 (
        echo success
        ) else (
        echo fail
        )
        PAUSE


    Aber das Thema ist jetzt hier erledigt. Warum der PC spinnt, weiß der Teufel.

    Danke für die Tipps.

    Liebe Grüße, die Luzie!


    • Bearbeitet Luzie Freitag, 31. August 2012 19:01
    Montag, 27. August 2012 07:10