Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

ASP Fehlermeldung - Erlaubnis Verweigert

Frage Entwicklung VB for Applications

Mitglied: Kovi22

Kovi22 (Level 1) - Jetzt verbinden

28.04.2012 um 19:07 Uhr, 6447 Aufrufe, 7 Kommentare

Hallo!
Kurz zu mir, da ich neu auf dieser Seite bin. Mein Name ist Markus, 19, und komme aus Österreich.
Ich bin auf dem Gebiet "Programmierung mit VBScript" noch relatvi neu und sitze seit einigen Monaten an meinem ersten Projekt, ein kleiners Programm. Da hat mir schon die ein oder andere Fehlermeldung zu schaffen gemacht

Jetzt zum eigentlichen Problem:

Im Browser bekomme ich folgende Fehlermeldung:

..."Laufzeitfehler in Microsoft VBScript Fehler "800a0046'
...Erlaubnis verweigert.
.../helpdesk/auslesen_in_txt.asp, Zeile 20 "


Hier mein Code:

<%
' FileSystemObject objFs oeffnen
Set objFs= CreateObject("Scripting.FileSystemObject")

' Dateiname festlegen
strDateiname = Server.MapPath("/testdatei.txt")

' Einen Textstream (objTextStream) zur Textdatei oeffnen
Set objTextStream = objFs.CreateTextFile(strDateiname, True) 'Zeile 20

' Inhalt fuer Datei in String strWriteString speichern:
strWriteString = "Text fuer die Datei"

' String in Datei schreiben:
objTextStream.Write strWriteString

' Objekte schliessen
objTextStream.Close
Set objTextStream = Nothing
Set objFs = Nothing

Response.Write "Der folgende Inhalt wurde in die Datei "
Response.Write strDateiname & " geschrieben:<BR>"
Response.Write Replace(Server.HTMLEncode(strWriteString) , _
vbCrLf,"<BR>" & vbCrLf)
%>

Kann an den Berechtigungen liegen (sagt zumindest Google) obwohl ich schon so ziemlich volle Berechtigungen vergeben habe.


Ich benutze einen Windows Server 2008 mit IIS7 und hoffe auf eure Hilfe.


MfG
Kovi
Mitglied: Arano
29.04.2012 um 13:26 Uhr
Hi Kovi,

Ich habe zwar keinen Schimmer vom IIS, ASP und VBScript (verwende Apache und PHP) aber die Funktionsnamen haben mich etwas stutzig werden lassen.
Folgender Abschnitt:
01.
' Dateiname festlegen 
02.
strDateiname = Server.MapPath("/testdatei.txt") 
03.
 
04.
' Einen Textstream (objTextStream) zur Textdatei oeffnen 
05.
Set objTextStream = objFs.CreateTextFile(strDateiname, True) 'Zeile 20
Server.MapPath() ...
  1. Warum den ganzen Aufwand, nur um einen Dateinamen vorzugeben ? Da kann doch auch eine normale Zeichenkette reichen !
  2. "Server.MapPath" klingt auch gaaanz anders als das vorhaben einen Dateinamen zu definieren: "Server binde Pfad ein" - Laufwerke werden doch eingebunden, "gemappt".

Und siehe da, einfach in der MSDN nachgeschlagen: MSDN - Server.MapPath

Zudem, __und das ist der Auslöser der Fehlermeldung__, gibt dieses Funktion nichts zurück !
strDateiname ist also LEER !
So kann das Vorhaben in Zeile 20, eine Datei zu erstellen, auch nicht funktionieren !


Tipp:
Oft findet man Fehler schon, wenn man sich in einem Fehlerfall ALLE beteiligten Variablen und Objekte ausgeben/anzeigen lässt...
So wäre hier aufgefallen das "strDateiname" eine leere Variable ist ;)


Viel Erfolg weiterhin
~Arano
Bitte warten ..
Mitglied: Kovi22
29.04.2012 um 14:24 Uhr
Hallo und danke für die Antwort!

Was ich allerdings komisch finde, ist, dass es unter VIsta mit IIS funktioniert ohne Mänchen zu machen.

Aber auf dem Virtual Server 2008 nicht. Da kommt die Fehlermeldung, also glaube ich eher weniger, dass es am Code selbst liegt, sondern an irgendeiner Einstellung.


Btw.: Wie meinst du hätte ich es einfacher lösen sollen? So nebenbei, den Code habe ich mir aus dem Internet zusammengestöpselt. (Habe gedacht, solangs funktioniert, warum nicht)

Schönen Sonntag!
LG
Kovi
Bitte warten ..
Mitglied: Arano
29.04.2012 um 15:20 Uhr
Hi.

Hm.. das wusste ich natürlich nicht !
Aber auch dafür kann ich mir zur Erklärung etwas "ausdenken" :P
Etwas, das mir vorher schon ähm... aufgefallen war.

  • Woher weist du, ob die Datei wirklich erstellt wurde ?
  • Wie kannst du dir sicher sein, das wirklich in die Datei geschrieben wurde ?
Und da hängen auch gleich weitere Fragen dran:
  • Was soll passieren wenn die Datei nicht erstellt werden konnte ? (z.B. fehlende Rechte)
  • Was soll passieren wenn nicht in die Datei geschrieben werden konnte ? (z.B. volle Datenfestplatte)

Das sind Dinge die man eigentlich beim Programmieren mit überlegen und behandeln sollte:
z.B.
Wenn die Datei nicht erstellt werden kann. dann macht es wenig Sinn zu versuchen etwas hinein zu schreiben - das wird logischerweise auch in die Hose gehen. Es werden weiterhin unschöne Fehlermeldungen generiert und in deinem Fall würde sogar die Endausgabe einfach falsch sein weil ja nichts geschrieben werden konnte - ohne existierender Datei.

Aber ich habe dazu nichts gesagt weil ich das als Anfänger nicht anders gemacht habe, Hauptsache das was ich will funktioniert JETZT SOFORT :D

Okay, mal wieder zurück zu deinem Problem.
Warum ich das alles nun doch aufgelistet habe ist folgendes.
Was passiert, wenn die Fehlermeldung des fehlgeschlagenen Versuches eine Datei zu erstellen auf dem Vista-Rechner einfach ignoriert/unterdrückt wurde... (IIS- oder ASP-Konfiguration, da habe keine Ahnung, nur diese Vermutung)
Richtig ! Man bekommt die Anzeige das etwas in die Datei geschrieben wurde ABER ob das tatsächlich der Fall war, das weiss man so nicht !

Probiere doch mal folgendes:
  1. Kommentiere ALLES unter strDateiname = ... aus und lasse dir den Inhalt von dieser Variabel ausgeben Response.Write "Variable: ###-" & strDateiname &"-###"
    (Durch die Rauten-Bindestrich-Kombination sieht man genau wo der Inhalt der Variabel stehen sollte - falls er fehlt oder falsch ist)
  2. Ersetze den angegebenen Dateinamen durch eine absolute Pfadangabe (C:\pfad_zur\Datei.ext)
  3. Probiere den relativen und den absoluten Dateipfad direkt in Zeile 20 CreateTextFile()

Ich bin mir allerdings ziemlich sicher, das die Ausgabe von "strDateiname" leer sein wird, das sagt ja auch die Methodenbeschreibung im MSDN. So ist es dann nur logisch, das das Erstellen der Datei fehlschlägt - ohne gültigen Dateinamen.

01.
strDateiname = Server.MapPath(...) 
02.
' speicher den Rückgabewert von MapPath() in die Variable "strDateiname" 
03.
' was gibt die Method zurück ? Rückgabewert = NICHTS ! 
04.
' strDateiname = NICHTS 
05.
 
06.
Set objTextStream = objFs.CreateTextFile(strDateiname, True) 
07.
' speicher den Rückgabewert von CreateTextFile() in die Variable "objTextStream" 
08.
' was gibt die Method zurück ? Rückgabewert = i/o-Stream auf die Datei "strDateiname" ! 
09.
' was gibt die Method zurück ? Rückgabewert = i/o-Stream auf die Datei NICHTS ! 
10.
' objTextStream = i/o-Stream auf die Datei NICHTS 
11.
' Wobei es dabei logischerweise zu einer Fehlermeldung kommen MUSS, denn eine Datei "NICHTS" kann niemals erstellt, geöffnet, beschrieben, geschlossen, umbenannt, verschoben oder gelöscht werden.
Also wenn der Inhalt der Variable "strDateiname" nun wirklich leer ist, definiere die Variabel erneut mit dem Wert des Dateipfades:
strDateiname = "/testdatei.txt"
und dann sollte es schon wieder funktionieren (sofern es nicht weitere Fehler gibt, z.B. die von die erwähnten Dateirechte)


~Arano
Bitte warten ..
Mitglied: Kovi22
29.04.2012 um 15:48 Uhr
Hallo Arano! Danke nochmal.

Ich muss mich allerdings wiederholen: unter Vista hat ALLES geklappt. Die Datei wurde erstellt und "Text fuer die Datei" wurde in die Datei geschrieben. Genau so, wie es sein soll.

Jetzt werd ich erstmal deine Ratschläge durchprobieren und weitertüffteln und mir auch einiges davon für die Zukunft merken

Ich meld mich später wieder.

LG
Kovi
Bitte warten ..
Mitglied: Kovi22
29.04.2012 um 17:19 Uhr
EDIT:

So, also strDateiname ist NICHT leer. Sie gibt den physikalischen Pfad der "testdatei.txt" aus. Also in etwa C:\inetpub\wwwroot\testdatei.txt
Deine anderen Vorschläge führen leider auch zu keiner Lösung des Problems.


Was ich gerade entdeckt habe: Bei der Rechtevergabe kann ich bei ERSTELLER-BESITZER keine Veränderung vornehmen. Wenn ich also den Haken reinsetze und auf übernehmen drücke, springt er wieder raus. Logischerweise kann das doch garnicht funktionieren, wenn also ich bzw. das Skript der Ersteller ist und daher keine Schreibrechte hat. Sehe ich das richtig?
Bitte warten ..
Mitglied: Arano
29.04.2012 um 17:30 Uhr
Aber, aber, aber...

Hier gleich noch ein Tipp: Richtig lesen !
In der MSDN steht:
Return values:
This method has no return values.
Was für mich ziemlich eindeutig ist.
Allerdings musste ich mich ja gerade eines besseren belehren lassen und habe noch mal nachgelesen und siehe da:
Parameter:
path
...the MapPath method __returns a path__ as if Path were a full, virtual path. If Path doesn't start with a slash, the MapPath method __returns a path__ relative to the directory of the .asp file being processed.

Gut, dann lag es doch nicht daran, entschuldige soweit für die falschen Infos, mein Fehler.
So ein Mist aber auch, ich war mir so sicher, sonst hätte ich mich auch gar nicht erst beteiligt


Dann sind es vielleicht doch die Dateirechte.
Wie es beim IIS mit Windows ist weis ich wie gesagt nicht aber beim Apache mit Linux ist es so das der Webserver seinen eigenen Benutzer hat (z.B. "www-run"). Dieser muss natürlich entsprechende Berechtigungen für den Ordner besitzen um in ihm arbeiten zu können. Hier wäre das deinem Beispiel nach der Ordner "C:\inetpub\wwwroot". Entweder der Ordner gehört dem Webserver-User, er gehört zu der Webserver-Gruppe oder er ist komplett für alle freigegeben.

Steht vielleicht mehr in den Logfiles des IIS ? (oder ist das bei Windows das Event-/Systemlog)


~Arano
Bitte warten ..
Mitglied: Edi.Pfisterer
30.04.2012 um 11:01 Uhr
Hallo!
Das Problem liegt daran, dass Vista IIS 6.x verwendet, Server 2008 IIS 7.x
Und unter IIS 7 sind "übergeordnete Pfade" standardmäßig deaktiviert...

hier ein Lösungsansatz:
http://learn.iis.net/page.aspx/566/classic-asp-parent-paths-are-disable ...

oder in der Commandshell:
appcmd set config /section:asp /enableParentPaths:True

gutes Gelingen,
lg
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
gelöst DISM Fehlermeldung: Fehler: 5 Zugriff verweigert! (3)

Frage von Bobby.S zum Thema Windows 7 ...

Windows Server
Fehlermeldung "DotNet Memory Management Global " (5)

Frage von xXEddiXx zum Thema Windows Server ...

Outlook & Mail
Fehlermeldung beim schließen von Outlook 2016 auf Terminalserver (7)

Frage von Tommy1983 zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...