Announcement

Collapse
No announcement yet.

WScript in einer Aspx seite

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WScript in einer Aspx seite

    Hallo!

    Ich entwickle gerade mit Visual Studio 2005 eine ASP.NET Website mit C#. Jedoch möchte ich einen belieben WScript-Code einer aspx-Seite hinzufügen und diesen ausführen.

    Kann mir irgendjemand von euch erklären wie das überhaupt geht?

    LG

  • #2
    Hallo,

    Was meinst du mit WScript Code genau?

    Du koenntest zB mit 'Process.Start(...)' ein bestimmtes File / Anwendung / ... ausfuehren und ev. funktioniert das auch fuer deinen WScript Code.

    Vergiss aber nicht die Security - einer WebSite Adminrechte zu geben halte ich fuer deine gute Idee und ob der Default 'ASPNET' User fuer deinen WScript Code die noetigen Rechte hat ist fraglich.
    *-- robert.oh. --*

    Comment


    • #3
      Hi!

      Danke für das schnelle Antworten. Das mit Process.Start hat funktioniert. Nun hab ich eine weitere Frage: Beim dem VB-Script, dass ausgeführt wird, wird nur eine Message-Box angezeigt. Ich möchte, dass diese Daten, die dieser Skript zurückgeliefert auf der ASPX-Seite angezeigt werden und nicht als Meldung einmalig erscheint. Hier ist der WScript-Code:

      Code:
      Set wshNetwork = WScript.CreateObject( "WScript.Network" )
      Set WshShell = WScript.CreateObject("WScript.Shell")
      strComputer = "."
      Company = "Ihre Firma"
      
      Do While wshNetwork.username = ""
        WScript.Sleep 250
      Loop
      strComputerName  = wshNetwork.computerName
      strUserName   = wshNetwork.userName
      strDomainName   = wshNetwork.userDomain
      
      Call SubZusammenfassung
      
      Sub SubZusammenfassung ()
      
          Set colDrives = wshNetwork.EnumNetworkDrives
          Set colPrinters = wshNetwork.EnumPrinterConnections
          Dim CRLF    
          CRLF = Chr(13) & Chr(10)
      	
          strMsg = "Anmelde Ergebnisse" & CRLF & CRLF & "Benutzername" & Chr(9) & "= " & strUserName & CRLF & "Computername" & Chr(9) & "= " &  strComputerName & CRLF & "Domäne" & Chr(9) & Chr (9) & "= " & strDomainName & CRLF
      
          If colDrives.Count = 0 Then
             strMsg = strMsg & CRLF & "Kein Netzlaufwerk ist verbunden." & CRLF
          Else
             strMsg = strMsg & CRLF & "Verbundene Netzlaufwerk(e):" & CRLF
             For i = 0 To colDrives.Count - 1 Step 2
                strMsg = strMsg & CRLF & colDrives(i) & Chr(9) & colDrives(i + 1)
             Next
          End If
      '* Verbundene Drucker Listen
          If colPrinters.Count = 0 Then
             strMsg = strMsg & CRLF & CRLF & _
                "Kein Netzwerk-Drucker ist verbunden." & CRLF
          Else
             strMsg = strMsg & CRLF & CRLF & _
                "Verbundene Netzwerk-Drucker:" & CRLF
             For i = 0 To colPrinters.Count - 1 Step 2
                strMsg = strMsg & CRLF & colPrinters(i) & _
                   Chr(9) & colPrinters(i + 1)
             Next
          End If
      	BtnCode = WshShell.PopUp(strMsg)
      End Sub
      Ich danke im Voraus!

      LG

      Comment


      • #4
        Hallo,

        Ich bin mir nicht sicher, wie du Werte in deinen Code zurueck bekommst, aber ich wuerde mir mal die ProcessStartInfo Klasse (http://msdn2.microsoft.com/en-us/lib...fo(VS.71).aspx) genauer anschauen.

        Wenn es geht, dann muesste es mit Hilfe dieser Klasse gehen (denke ich).

        Hoffe das hilft dir weiter.
        *-- robert.oh. --*

        Comment


        • #5
          WScript-Code in einer ASPX-Seite

          Hallo Robert!

          Ich danke dir für den Link. Du hattest Recht, dass diese Klasse die Lösung für mein Problem ist.

          AUFLÖSUNG DES PROBLEMS

          Zusammengefasst:

          Problemstellung:
          Ich hatte einen WScript-Code (weiter oben steht der), der am Ende eine MessageBox mit verschiedenen Werten zurückliefert. Nun wollte ich eine .aspx Seite entwickeln, wo diese Werte schön angezeigt werden.

          Problem:
          Wie funktioniert...
          1. ...die Ausführung dieses Skripts bzw. WScript-Code in ASP.NET.
          2. ...keine Anzeige einer Messagebox, sondern eine Umleitung dieser Werte beispielsweise in einem Label.


          Lösung:
          • Wie schon Robert schrieb, kann man VBScipts oder .exe-Dateien mit Process.Start(..) ausführen, jedoch erhält man in diesem Fall das selbe Ergebnis: Eine Messagbox mit Werten, die man nicht verarbeiten kann.

          Die Umleitung erfolgt folgendermaßen:
          VBScripts werden in Windows mittels WScript.exe oder CScript.exe (Konsole) ausgeführt. Beide Dateien befinden sich im Systemverzeichnis -> ...\Windows\system32

          Jetzt kommt folgernder C# Code:
          Code:
                  Process p = new Process();
                  p.StartInfo.UseShellExecute = false;
                  p.StartInfo.RedirectStandardOutput = true;
                  p.StartInfo.FileName = "C:\\Windows\\system32\\WScript.exe";
                  p.StartInfo.Arguments = ' " '+Server.MapPath("~/skriptname.vbs")+' " '; //Bei ' " ' gehören keine Leerzeichen, wurde nur zur bessern Lesbarkeit hinzugefügt.
                  /*Wenn die Skripte im selben Verzeichnis wie die Website liegen -> Durch Server.MapPath("~/dateiname") wird der Pfad der Datei zurückgegeben. ;) */
                  p.Start();
                  p.WaitForExit();
                  string output = p.StandardOutput.ReadToEnd();
                  Label1.Text = output;
                  p.Close();


          Wichtig ist jedoch, dass man im VBScript verschiedene Ausgaben nicht mit Msgbox, WScript.Echo etc. macht, sondern mit WScript.StdOut.Write...Die Ausgaben müssen alle in den StandardOUTPuffer, damit mittels der Methode StandardOutput.ReadToEnd(), die Werte gelesen werden können.

          Ich hoffe, dass es vielen Leuten, die das gleiche/ähnliche Problem haben hilft!

          lg
          Zuletzt editiert von progger; 30.01.2008, 19:32. Reason: Ausbesserung

          Comment


          • #6
            Hi,

            Super, dass du die Loesung fuer dieses Problem angefuehrt hast. Es trifft ja nicht nur auf deinen Fall zu, sondern auf alles was 'extern' aufgerufen wird und der Rueckgabewert im eigenen Code verwendet werden muss.

            Schonen Abend!
            *-- robert.oh. --*

            Comment

            Working...
            X