ASP Fehlermeldung - Erlaubnis Verweigert
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184245
Url: https://administrator.de/contentid/184245
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
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:
Server.MapPath() ...
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
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:
' Dateiname festlegen
strDateiname = Server.MapPath("/testdatei.txt")
' Einen Textstream (objTextStream) zur Textdatei oeffnen
Set objTextStream = objFs.CreateTextFile(strDateiname, True) 'Zeile 20
Server.MapPath() ...
- Warum den ganzen Aufwand, nur um einen Dateinamen vorzugeben ? Da kann doch auch eine normale Zeichenkette reichen !
- "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
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.
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:
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.
Also wenn der Inhalt der Variable "strDateiname" nun wirklich leer ist, definiere die Variabel erneut mit dem Wert des Dateipfades:
und dann sollte es schon wieder funktionieren (sofern es nicht weitere Fehler gibt, z.B. die von die erwähnten Dateirechte)
~Arano
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 ?
- 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:
- Kommentiere ALLES unter
strDateiname = ...
aus und lasse dir den Inhalt von dieser Variabel ausgebenResponse.Write "Variable: ###-" & strDateiname &"-###"
(Durch die Rauten-Bindestrich-Kombination sieht man genau wo der Inhalt der Variabel stehen sollte - falls er fehlt oder falsch ist) - Ersetze den angegebenen Dateinamen durch eine absolute Pfadangabe (C:\pfad_zur\Datei.ext)
- 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.
strDateiname = Server.MapPath(...)
' speicher den Rückgabewert von MapPath() in die Variable "strDateiname"
' was gibt die Method zurück ? Rückgabewert = NICHTS !
' strDateiname = NICHTS
Set objTextStream = objFs.CreateTextFile(strDateiname, True)
' speicher den Rückgabewert von CreateTextFile() in die Variable "objTextStream"
' was gibt die Method zurück ? Rückgabewert = i/o-Stream auf die Datei "strDateiname" !
' was gibt die Method zurück ? Rückgabewert = i/o-Stream auf die Datei NICHTS !
' objTextStream = i/o-Stream auf die Datei NICHTS
' 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
Aber, aber, aber...
Hier gleich noch ein Tipp: Richtig lesen !
In der MSDN steht:
Allerdings musste ich mich ja gerade eines besseren belehren lassen und habe noch mal nachgelesen und siehe da:
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
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.This method has no return values.
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
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
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