Announcement

Collapse
No announcement yet.

Batch am Client ausführen

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

  • Batch am Client ausführen

    Hallo zusammen,

    Ich weiß nicht, ob ich hier genau im passenden Board poste, wenn es ein besseres gibt würde ich mich freuen, wenn die Mod's den Beitrag verschieben.
    Ich habe eine Anwendung, welche nur HTML-Links nutzt, muss aber eine Acess-DB mit Sprungansweisungen (Übergabeparametern) öffnen. Der Gedanke, hierfür eine Action-URL zu definieren war schon nicht schlecht und funktioniert. Allerdings denkt die Anwendung erst einmal, dass jeder Link im Webbrowser gut aufgehoben ist und ruft diesen unter Angabe der Ziel-URL auf. Somit bleibt nach dem erfolgreichen Aufruf ein leeres Browserfenster offen.
    Daher dachte ich mir nun, dass ich den Umweg über einen Webserver gehe und ein kleines unabhängiges Projekt erstelle, welches ein CMD-File erstellt und dem User zum Download anbietet. Gibt man der Seite in den Sicherheitseinstellungen das notwendige Vertrauen, dann kann man die Datei ja eigentlich ohne Nachfrage ausführen lassen und vermutlich danach auch das Browserfenster wieder schließen.
    Soweit, so gut, die Anwendung funktioniert bis auf etwas Kosmetik, nur bekomme ich die CMD-Datei nicht. Erstelle ich eine TXT-Datei, so wird sie mir sauber angezeigt. Klemmt das nun an meinem Code (eigentlich ja nicht, wenn TXT geht), an den Sicherheitseinstellungen des IIS oder des Webbrowser.

    Hier mal meine kleine VB.NET-Routine:
    Code:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim i As Integer
            Dim Datei As String
            Dim Befehl As String = ""
            Dim ok As Boolean = True
    
    
            Datei = Server.MapPath("~/batch/") & Session.SessionID & ".cmd"
            Label1.Text = Datei
    
            If Len(Request.QueryString("command")) > 0 Then
                Befehl = Request.QueryString("command")
                If CInt(Request.QueryString("pcount")) > 0 Then
                    For i = 1 To CInt(Request.QueryString("pcount"))
                        If Len(Request.QueryString("parameter" & CStr(i))) > 0 Then
                            Befehl = Befehl & " " & Request.QueryString("parameter" & CStr(i))
                        Else
                            ok = False
                        End If
                    Next
                End If
            Else
                ok = False
            End If
            If ok Then
                Dim myFile As New System.IO.StreamWriter(Datei, False)
                myFile.WriteLine(Befehl)
                myFile.Close()
                Response.Redirect("~/batch/" & Session.SessionID & ".cmd")
            Else
                Label1.Text = ("Fehlerhafter Aufruf!")
                Label1.Visible = True
            End If
        End Sub
    Und hier die Fehlermeldung:
    Die von Ihnen gesuchte Seite wurde eventuell entfernt, ihr Name wurde geändert, oder die Seite ist vorübergehend nicht verfügbar.
    Niels

  • #2
    Mit dem Response.Redirect sendet man die Datei dem Client NICHT!.
    Das klappt ja mit *.txt Dateien nur, weil diese Extention nicht als executable von IIS interpretiert wird. Mit den anderen Extentionstypen so wie *.htm, *.htm usw wird das nicht klappen. Das wird klappen beispielsweise mit *.aspx solange es kein ASP.NET installiert ist, da IIS in diesem Fall keine Ahnung von diesem Extention hat. Wenn aber ASP.NET insatlliert wird das auch mit *.aspx nicht kappen. *aspx Dateien werden dann auf dem IIS so registriert, dass sie von ASP Modul bearbeitet werden müssen. ASP wird erst mal auf aufruf aspx Seite reagieren und dem IIS dann gerenderte html weitergeben.
    Die Datei dem CLient sendet man mit z.b. HTTP content output stream.
    Code:
     //Set the appropriate ContentType.
      Response.ContentType = "Application/pdf";
      //Get the physical path to the file.
      string FilePath = MapPath("acrobat.pdf");
      //Write the file directly to the HTTP content output stream.
      Response.WriteFile(FilePath);
      Response.End();
    Zuletzt editiert von vadym voytas; 30.04.2010, 22:26.
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment

    Working...
    X