kettenschutz: ASP - VBSCRIPT - CreateFolder in Loop aus Datenbankeinträgen

Hallo Leute

ich bin kein erfahrener Webmaster, habe aber die ehrenhafte Aufgabe erhalten unser Intranet aufzupeppen. Ich bin nicht ganz doof im scripten und coden, aber von Talent fehlt jede Spur.

Ich habe folgendes Problem, und bekomme es einfach nicht gelöst. Ein großes Hindernis ist auch, dass unser Unternehmensserver lediglich "Fehler 500" schmeisst, sobald ein Fehler im Code steckt. Keinerlei Hinweis auf die eigentliche Fehlermeldung.

Wir betreiben eine Datenbank (MsAccess) mit Aufträgen. Im Laufe der Jahre ist diese bereits ziemlich gewachsen. Die Datenbank wird über eine Tabelle im Web angezeigt.

Schleife

<% 
While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF)) 
%>

Beispielszeile

<td><%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%></td>

Felder wie Kurzbezeichnung gibt es insg. 10 Stück. Bei diesen Aufträgen handelt es sich um öffentliche Aufträge, bei denen auch Flyer eine Rolle spielen. Diese sollen zukünftig verlinkt werden können. Aus diesem Grund habe ich einen weiteren Datensatz in die Tabelle eingefügt, der auf den zukünftigen Ort des Kursbezogenen Ordners weisen soll. Sieht so aus :

`<td><a href="file:///C:\TEST\<%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%>.<%=(Recordset1.Fields.Item("Ort").Value)%>\" target="_blank"><center><img border="0" src="../images/Folder.png" valign="center" width="20" height="30"></a> </center>`

Man sieht hier dass ich einen Ordner angeben möchte, der aus der Kurzbezeichnung sowie dem Ort bestehen soll. (Kurs.Ort). Das funktioniert auch problemlos. Erstelle ich den betreffenden Ordner händisch funktioniert die Verlinkung einwandfrei. Soweit so gut.

Das Problem ist, dass wir über 1000 solcher "Kurse" haben, und diese auch stets neu zukommen. Daher versuchte ich ein CreateObject mit in die Schleife zu bauen. Ein sehr großes Problem scheint zu sein, dass ich den Namen aus 2 Datenbankeinträgen erstellen lassen möchte. Jedes mal wenn > <%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%>.<%=(Recordset1.Fields.Item("Ort").Value)%>

dazu kommt, kommt Fehler 500, und Notepad ++ zeigt auch optisch das Ende des Codes nicht mehr an.

Das war der letzte Versuch mit FSO

    </tr>  <--- Ende der Kurstabelle
<% 
Dim strFolder = "C:\TEST\<%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%>.<%=(Recordset1.Fields.Item("Ort").Value)%>"
Dim oFSO

Set oFSO = CreateObject("Scripting.FileSystemObject")

If Not oFSO.FolderExists(strFolder) Then
  oFSO.CreateFolder strFolder
End If

%>

ServerMapPath und sonstige Googleleien habe ich auch schon probiert, aber ich lande immer wieder beim Fehler 500

Könnt ihr mir sagen, ob mein vorhaben machbar ist? Und wenn ja, wie man da hingelangen könnte?

ich danke euch vielmals

Mfg

Lutz

  1. Hallo kettenschutz,

    irgendwo gibt's bestimmt einen Log, und eigentlich sollte ASP bei Fehlern auch etwas sinnvolles ausgeben, das den Fehler beschreibt. Bei Produktionsseiten schaltet man das natürlich ab.

    eine Möglichkeit ist, sich eine Custom Error Page zu machen. Hier steht was dazu. Solltest Du einen Syntax-Error im Script haben, der es am Starten hindert, wird das der einzige Weg sein. Das hier erzählt auch einiges darüber. Das Handling im IIS5 ist für den heutigen IIS natürlich anders, aber prinzipiell sind Custom Error Definitionen immer noch möglich. Vielleicht hat bei eurem Server ja auch jemand diese Einträge gelöscht.

    Laufzeitfehler kann man auch mit ON ERROR reporten. Entweder so:

    ON ERROR RESUME NEXT
    ' verdächtiger Code
    IF Err.Number > 0
       Response.Write "Something went horribly wrong: "
       Response.Write Err.Number
       Response.Write "<br>"
       Response.Write Err.Description
       Response.End
    END IF
    

    oder so:

    ON ERROR GOTO errorExit
    ' verdächtiger Code
    Err.Clear
    
    errorExit:
    IF Err.Number > 0
       Response.Write "Something went horribly wrong: "
       Response.Write Err.Number
       Response.Write "<br>"
       Response.Write Err.Description
       Response.End
    END IF
    

    Rolf

    --
    sumpsi - posui - clusi
    1. Danke Rolf, ich bastel das mal ein

      Kannst du denn vorab irgendwas zur Problemstellung sagen?

      1. Hallo kettenschutz,

        nö. Ich habe mich vor ein paar Jahren mal peripher mit ASP befassen müssen und wurde vor 35 Jahren mit BASIC an Computer herangeführt. VBScript und ADO sind mir nicht so recht vertraut, darum kann ich nicht sagen, ob Du es falsch anprogrammierst.

        Deshalb frei nach Konfuzius die Angelrute statt des Fisches, ich hoffe, dass Du mit dem Err-Objekt weiterkommst.

        Rolf

        --
        sumpsi - posui - clusi
    2. ich habs jetzt wie folgt in einer test.asp eingebaut

      <% ON ERROR RESUME NEXT %>
      <% Dim strFolder = "C:\TEST\"
      Dim oFSO
      Set oFSO = CreateObject("Scripting.FileSystemObject") 
      %>
      <%
      If Not oFSO.FolderExists(strFolder) Then %>
      <%  oFSO.CreateFolder strFolder %>
       
      <% End If %>
      
      <% IF Err.Number > 0
         Response.Write "Something went horribly wrong: "
         Response.Write Err.Number
         Response.Write "<br>"
         Response.Write Err.Description
         Response.End
         %>
      <% END IF %>
      

      Ergebnis ist Fehler 500 Ich bin aber auch nicht sicher, ob das mit den VBS tags <% immer so hin haut

      1. Tach!

        Ergebnis ist Fehler 500

        Es wird generell kein verwertbarer Text zu einem Fehler 500 angezeigt, damit keine Interna die zu dem Fehler geführt haben veröffentlicht werden. Aber die Ursache wird in Errorlogs notiert. Unter Windows ist das neben den Logfiles des Webservers auch das Eventlog von Windows selbst, anschaubar mit dem Event Viewer.

        dedlfix.

        1. Hoi und Danke für deine Hilfestellung ich arbeite auf einem Terminal-Server Client. Auch der webserver ist virtualisiert. Mir steht nichts zur Verfügung ausser dem Eventlog meines eigenen TS Clients, und da ist nicht viel zu holen.

          1. Tach!

            ich arbeite auf einem Terminal-Server Client. Auch der webserver ist virtualisiert. Mir steht nichts zur Verfügung ausser dem Eventlog meines eigenen TS Clients, und da ist nicht viel zu holen.

            Dann musst du halt zu deienm Chef gehen und im sagen, dass die Aufgabe länger als nötig dauert, weil du keine gescheiten Arbeitsmittel zur Verfügung hast.

            dedlfix.

          2. Hallo kettenschutz,

            dieses Virtualisierungskonstrukt ist durchaus nicht ungewöhnlich, mein Brötchenbezahler macht das genauso.

            Allerdings kann man nicht erwarten, dass ein Entwickler auf einem TS-Client, der nur die normalen Office-Berechtigungen hat, erfolgreich arbeitet. Bei uns haben die Entwickler zwar auch nur den TS-Client Döschen auf dem Tisch, entwickeln aber auf einer separaten virtuellen Maschine, auf der sie Admin-Rechte haben.

            Du brauchst:

            • Eine ASP Entwicklungsumgegung mit Source-Control System (TFS, Git, oder sonstwas)
            • Zugang zum Webserver, um die ASP Dateien draufzuladen
            • den Config-Zugang zu deinem Web (IIS Manager) oder einen kompetenten, erreichbaren Admin im Hintergrund
            • eigentlich auch eine Möglichkeit, dass sich deine IDE (z.B. Visual Studio) zu deinem Web verbinden kann, damit Du debuggen kannst. "Response.Write" Debugging ist Zeitverschwendung. Weiß ich genau, hab ich schon gemacht. Per Debugger durchsteppen ist VIEL schöner. Und es klappt am besten mit einem lokalen IIS (ob der integrierte Webserver von Visual Studio ASP kann, weiß ich nicht).

            Wie kontrollierst Du denn deinen virtuellen Webserver? Hast Du dort einen Admin-Zugang? Kannst Du mit Remote Desktop darauf zugreifen (mstsc.exe)? Dann könntest Du auf diesem Weg die Serverlogs anschauen (wo die für dein Web stehen, findest Du im IIS Manager, wenn Du dein Web anwählst und dann unter IIS / Protokollierung schaust). Ob ein ASP Fehler im Eventlog des Webservers landet, weiß ich gar nicht. Könnte sein. Im einfachen IIS Log steht aber vermutlich auch nichts oder nur sehr magere Information...

            Wenn Du nur ein Fileshare hast um deine ASPs abzuladen, lass Dir vom Serveradmin ein weiteres Share für den Logfile-Ordner deines Web einrichten oder das Web so konfigurieren, dass die Logs in einem Unterverzeichnis des Web landen (NUR in der Entwicklung, nicht in Produktion).

            Rolf

            --
            sumpsi - posui - clusi
            1. Moin Rolf, und danke für dein Engagemente !

              Ich habe keinerlei Zugriff auf den Webserver. Lediglich ein share fürs wwwroot wird mir eingeräumt. Dies ist so, da wir mit ca 100 Standorten auch 100 Sites sharen. Dieser wird zentral betreut und da darf auch kein standort-admin ran. Leider. Die Idee, die log files auszulagern is aber gar keine schlechte. Das werde ich mal anfragen. Tut nicht weh, und brauch keine schreibrechte.

              Allerdings kratzen wir leider nach wie vor nur am Thema Errorlogs. Mein eigentliches Problem ist ja ein ganz anderes xD

              wobei das eventuell gar keine große Nummer ist, aber man muss halt wissen wie :-/

              1. Tach!

                Allerdings kratzen wir leider nach wie vor nur am Thema Errorlogs. Mein eigentliches Problem ist ja ein ganz anderes xD

                Ja. Aber um dessen Ursache zu finden, braucht es die Errorlogs/Events. Du kannst stattdessen auch Rätselraten, was es denn sein könnte, und deine Zeit und Nerven mit Rumprobieren vergeuden. Nicht immer ist der Fehler durch alleiniges Code-Anschauen zu finden. Auch syntaktisch richtiger Code kann failen, zum Beispiel wenn irgendwelche Berechtigungen fehlen. Wie willst du sowas rausfinden, ohne mehr oder weniger aussagekräftige Meldungen?

                dedlfix.

                1. das ist natürlich vollkommen korrekt. Ich erhoffte mir, dass jemand direkt erkennt woran das problem liegt. ich weiß das editor nicht perfekt sind und sein können, aber was mich sehr stutzig macht ist eben das die codezeile zerbrochen wird wenn ich die requests aus der DB einbinde, als würde ein abschließendes TAG fehlen wahrscheinlich is da ein denkfehler drin, den ich einfach nich finde

              2. Hallo kettenschutz,

                100 Standorte und 100 Sites - euer Laden ist also nicht ganz klein.

                Man kann soviel in einem WebGarden hosten, das schafft der IIS bei entsprechendem Wumms im Server locker, aber verstehe ich das richtig? Du entwickelst auf der der Produktionsmaschine? Das wäre falsch verstandenes Agile Development - zum Entwickeln gehört immer ein eigener Webserver, der von der Produktion getrennt ist, und definitiv ein klar festgelegter Workflow für Test und Produktionsüberstellung. Am besten mit automatisierten Tests und Quellcode-Historisierung (TFS, Git, etc etc).

                Ich verstehe Dich so, dass du da eine Art „innerbetriebliche Nebentätigkeit“ betreibst und euer Intranet von irgendwem anders entwickelt wurde, den man für's Aufpeppen aber nicht bezahlen will? In dem Fall ist die ganze Pracht der professionellen Entwicklungs-Workflows wohl nicht erreichbar, aber trotzdem darfst Du nicht auf der Prod-Maschine herumbauen - das Ding muss LAUFEN. Frag auf jeden Fall euren Admin, ob er zeitweilig einen virtuellen Entwicklungsserver bereitstellen kann, auf dem er die Site, an der Du baust, als Testumgebung einrichtet, und auf dem Du Dich per Remote Desktop als Admin anmelden kannst. Eigentlich brauchst Du auch eine Test-Umgebung für die Datenbank. Das ist zwar erstmal umständlich, aber würdest Du auf der Autobahn bei voller Fahrt die Reifen deines Autos wechseln wollen?[1]

                Rolf

                --
                sumpsi - posui - clusi

                1. Es sei denn, du fährst die haarsträubende Reise im verrückten Bus ↩︎

                1. Lieber Rolf, summasummarum hast du alles richtig verstanden ;) Das Thema test-server zum entwickeln ist bereits geklärt, und einen server bekomme ich auch. Allerdings mahlen die mühlen immer recht langsam in so großen Unternehmen …

                  Bislang ändere ich aber nichts, dass den IIS in Gefahr bringt. Von daher habe ich mir bei den optischen Schönheiten keine großen Sorgen gemacht.

                  Es macht mich irre, dass ich nich verstehe warum dieser mist nicht aufgeht ;D

                  1. Hallo kettenschutz,

                    hast Du meinen Beitrag unten ("Nochmal von vorn") gelesen? Da sind noch ein paar Überlegungen drin bezüglich dessen, was Du eigentlich tun willst. Ggf. ist da ein Problem.

                    Und dann habe ich mir noch mal meine ASP-Interpreterbrille aufgesetzt und mir das hier angeschaut:

                    Dim strFolder = "C:\TEST\<%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%>.<%=(Recordset1.Fields.Item("Ort").Value)%>"
                    

                    Nach genauerer Betrachtung und einem traulichen Schwätzchen mit Onkel Bing Googlesby enthält dieser Code zwei Killer, und es gibt auch noch was für Dich zum Lesen:

                    • Ein Anführungszeichen in einem String: Die muss man verdoppeln! Der Code-Highlighter des Forums macht hier nicht ohne Grund "Farbfehler".
                    • Ein ASP End-Tag in einem String. Der Server führt zunächst den ASP-Interpreter aus, der HTML von Script trennt. Der ASP-Interpreter weiß aber nichts von VBScript-Strings und separiert stur nach <% und %>. Hier hat jemand das gleiche Problem. Nach %> ist Schluss, und du bekommst den Fehler "Unterminated String". Also gut, DU bekommst ihn nicht, weil dein Produktionsserver die Antwort vermutlich unterdrückt. Hier ist eine Anleitung, wie du das auf dem TEST-Server ändern kannst.
                    • Wenn Du unbedingt ASP-Tags in einen String einbauen willst, musst Du sie vor ASP verstecken. Zum Beispiel so: DIM dings = "<" + "%= MyVar %" + ">". Oder, wenn Du sie einfach im Browser darstellen willst, so: DIM dings = "&lt;%= MyVar %&gt;" (weil Du die spitzen Klammern vor dem Browser verstecken musst). Für ASP ist nur wichtig, dass es nicht an falscher Stelle ein <% oder %> antrifft.

                    Soweit die schlechten Nachrichten. Jetzt die gute: Es ist Unsinn, ASP <%= %> Tagging innerhalb einer VBScript-Verarbeitung einzusetzen um Werte zu erhalten. Du bist ja schon auf VBScript-Ebene. Und es würde auch keinen Sinn machen, ASP-Tags zum Browser zu schicken, der fängt damit nichts an. Du musst einfach nur Strings verketten, und die bisher beschriebenen Probleme stellen sich nicht mehr.

                    Probiere es doch mal so:

                    Dim strFolder = "C:\TEST\" + Recordset1.Fields.Item("Kurzbezeichnung").Value + "." + Recordset1.Fields.Item("Ort").Value
                    ...
                    

                    Das sollte den Syntaxfehler hoffentlich beheben. Die Frage bleibt aber nach der korrekten Lokalisierung dieses Ordners - dazu mehr in dem anderen Beitrag unter "Nochmal von vorn".

                    Rolf

                    --
                    sumpsi - posui - clusi
                    1. hi Rolf,

                      wir haben nicht nur den Namen gemeinsam sondern teilen uns auch eine der wichtigsten Tugenden eines Entwicklers (Ingenieurwesen): Beharrlichkeit.

                      Alle Achtung!

                      Und Freundschaft 😉

                    2. hey rolf nein, den beitrag hatte ich leider nicht gelesen. ist recht durcheinander hier ;D

                      ich danke dir erstmal richtig dicke für deine bemühungen. Ich lasse deine zeilen erstmal wirken, lese mich durch dein angefügtes beispiel und gehe dann erneut auf tour auf dem TEST-SERVER ;)

                      ich gebe Rückmeldung.

                      vielen vielen Dank

                    3. Guten Morgen Rolf, meine RÜckemldung hat sich leider etwas verzögert. Aber besser spät als nie ;)

                      Zunächst muss angemerkt werden, dass C:\Test nur ein Beispiel ist. Die Daten sollen bestenfalls auf einem Netzlaufwerk eines anderen Servers bereitgestellt werden. Daher auch fie file:/// Verlinkung. Sollte ein Anlegen der Pfade auf dem Webserver selbst notwendig sein, wäre das aber auch machbar. Ich habe nun folgenden Code eingfügt :

                      While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF)) 
                      %>
                      <%
                      Dim strFolder = "file:///PFAD_ZUM_NETZLAUFWERK" + Recordset1.Fields.Item("Kurzbezeichnung").Value + "." + Recordset1.Fields.Item("Ort").Value
                      Dim oFSO
                      
                      Set oFSO = CreateObject("Scripting.FileSystemObject")
                      
                      If Not oFSO.FolderExists(strFolder) Then
                        oFSO.CreateFolder strFolder
                      End If
                      %>
                      

                      somit habe ich deinen Vorschlag zur Variable übernommen. (Und tatsächlich wird jetzt zumindest auf notepad ebene korrekt interpretiert) Diese Variable sollte über If Not oFSO.FolderExists(strFolder) Then oFSO.CreateFolder strFolder auf existens geprüft werden, und im NOT fall der ORdner erstellt werden.

                      Und, Ergebnis? Fehler 500 ...

                      1. Hallo kettenschutz,

                        hast Du eventuell den WEND zum WHILE vergessen?

                        Und die Frage ist immer noch, warum Du HTTP 500 statt einer VBScript-Fehlermeldung bekommst; es ist nicht sinnvoll, einen Test-IIS mit Produktionseinstellungen zu betreiben. Hast Du mal in der IIS Konfiguration geschaut, ob für diesen Status ein Handler definiert ist? Du bist ja jetzt am TEST Server und kannst Dich dort per remote desktop einloggen, um die IIS Konfigurationsoberfläche zu erreichen. Will ich doch mal hoffen!

                        Rolf

                        --
                        sumpsi - posui - clusi
                        1. Hallo Rolf,

                          das WEND kommt weiter unten noch. Den CreateFolder möchte ich in eine bestehende Schleife bauen. Bezüglich Fehlermeldungen sollte ich Heute nachmittag weiteren Zugriff aufs Testsystem bekommen.

                          Wie auch immer das aus geht ... Ich danke Dir herzlichst für deine Mühen :)

      2. Guck mal hier, mit anderen Worten: 'ON ERROR RESUME NEXT' schaltet Dein Error Reporting ab. Kein Wunder also. MfG

        1. Hallo pl,

          du liegst nicht ganz richtig. ON ERROR RESUME NEXT verhindert den Script-Abbruch bei einem Fehler und ermöglicht es, danach mit Err.Number > 0 zu testen, ob ein Fehler vorlag. Err.Number bleibt gesetzt, bis ein neuer ON ERROR RESUME NEXT kommt oder Err.Clear aufgerufen wird.

          Ein Fehler wäre nur, ON ERROR RESUME NEXT ohne eine Abfrage auf Err.Number einzubauen.

          Rolf

          --
          sumpsi - posui - clusi
          1. du liegst nicht ganz richtig. ON ERROR RESUME NEXT verhindert den Script-Abbruch bei einem Fehler und ermöglicht es, danach mit Err.Number > 0 zu testen, ob ein Fehler vorlag. Err.Number bleibt gesetzt, bis ein neuer ON ERROR RESUME NEXT kommt oder Err.Clear aufgerufen wird.

            Ein Fehler wäre nur, ON ERROR RESUME NEXT ohne eine Abfrage auf Err.Number einzubauen.

            Auf der von mir verlinkten Seite steht das ja alles. Eine Suche nach asp error handling liefert ja auch noch andere und weitere Seiten. Man muß sich mit dem Thema halt ein bischen mehr befassen, dann kriegt man das auch hin. Wichtig ist, daß man das Prinzip verstanden hat, bei Fehlern eben die weitere Ausführung zu stoppen und den dazugehörigen Text auszugeben. MfG

      3. Hallo kettenschutz,

        Ich bin aber auch nicht sicher, ob das mit den VBS tags <% immer so hin haut_Rolf_

        Mit den <% %> Klammern verlässt Du die HTML Ebene und gelangst in den ASP Kontext. Wenn Du zwischen %> und <% kein HTML hast, brauchst Du den ASP-Kontext nicht zu verlassen. Für das Code-Snippet, das Du um 11:22 gepostet hast, reicht ein <% am Anfang und ein %> am Ende.

        Ich bin mit bei ASP nicht ganz sicher. Es wäre denkbar, dass %> ein ON ERROR RESUME NEXT terminiert und unwirksam macht. Bau mal alles in ein einzelnes <% %> Paar.

        Die andere Möglichkeit ist, dass ein Parse-Fehler das Script gar nicht erst loslaufen lässt. Wenn der Error-Handler funktioniert hätte, dann hätte der verwendete Text erscheinen müssen. Der IIS Log wäre jetzt wichtig.

        --
        sumpsi - posui - clusi
  2. hi,

    Ich bin nicht ganz doof im scripten und coden, aber von Talent fehlt jede Spur.

    Ich habe folgendes Problem, und bekomme es einfach nicht gelöst. Ein großes Hindernis ist auch, dass unser Unternehmensserver lediglich "Fehler 500" schmeisst, sobald ein Fehler im Code steckt. Keinerlei Hinweis auf die eigentliche Fehlermeldung.

    Dann solltest Du das hinbekommen: Den ganzen Code in einen try-Block setzen und im catch-Zweig mit einem vorangestellten Content-Type: text/plain den Fehlertext im Browser ausgeben. Tipp dazu: Erhebe jede Fehlermeldung und jede Warnung in den Status einer Exception. Dann gibt es auch eine sichtbare Fehlermeldung.

    MfG

    1. Hallo pl,

      Es wäre mir neu, dass VBScript try/catch kennt.

      Rolf

      --
      sumpsi - posui - clusi
      1. lt Google nicht. Aber mit deinem ERROR Reporting @Rolf B komme ich evtl schon weiter

        Trotzdem danke @pl für deinen hinweis

      2. Es wäre mir neu, dass VBScript try/catch kennt.

        Perl kennt es auch nicht. Trotzdem ist es möglich, Exceptions aufzufangen und vor allem diese 2 Dinge zu bewirken:

        1. den Status 500 verhindern infolde Ausgabe eines geeigneten Content-Type
        2. die Fehlermeldung im Browser ausgeben

        MfG

  3. Hallo kettenschutz,

    s so, bitte um Entschuldigung, jetzt hab ich nochmal von vorn gelesen und offenbar habe ich bisher nicht alles erfasst, was Du geschrieben hast.

    Verstehe ich das richtig, dass die Zeile

    <td><a href="file:///C:\TEST\<%=(Recordset1.Fields.Item("Kurzbezeichnung").Value)%>.<%=(Recordset1.Fields.Item("Ort").Value)%>\" target="_blank"><center><img border="0" src="../images/Folder.png" valign="center" width="20" height="30"></a> </center>
    

    gar kein Problem macht, solange du alles manuell anlegst?

    Deinen CreateFolder habe ich noch gar nicht ganz durchdacht. Dabei gibt's folgende Probleme:

    • Der CreateFolder läuft auf dem Server, nicht im Browser, d.h. du willst in C:\TEST auf dem Server einen Unterordner anlegen. Das darfst Du nicht. Das darf kein Web. Es sei denn, dein Admin war gnädig und hat es dem Application Pool User, unter dem den Web läuft, erlaubt. Würde ich jetzt mal bezweifeln.
    • Ein Link auf file:///c:/test/... zeigt auf den Rechner, auf dem der Browser läuft. D.h. Serverscript und Link beziehen sich auf verschiedene Maschinen, das ist nicht sinnvoll.
    • Ein Link auf den Ordner file:///c:/test/dings/bums/ öffnet den Ordner auf der lokalen Maschine im Browser - nicht sen Server-Ordner. Willst Du das?
    • Anlegen eines Ordners vom Browser aus, auf der Maschine wo der Browser läuft, musst Du mit JavaScript im Browser machen. Sofern es der Internet Explorer ist. Und eine entsprechende Vertrauensstellung besteht. Das ist bestenfalls wackelig. Und gehört mittlerweile in die Rubrik "nicht nachmachen".

    Warum musst Du auf dem Computer, auf dem der Anwender arbeitet, leere Ordner anzeigen? Oder willst Du einen Order anzeigen, der auf dem Server liegt?

    Rolf

    --
    sumpsi - posui - clusi