Möchte meinen kleinen Server per Button auf einer Seite abschalten können - wobei ich es schon geschafft habe, ihn per WakeOnLAN über Internet einschalten zu können.
Dazu habe ich die folgenden beiden Skripte/Files im Netz gefunden:
remote.aspx
CODE
<%@ Page language="C#" CodeBehind="remote.aspx.cs" AutoEventWireup="false" Inherits="restartWindows.WebForm1"%>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 144px; POSITION: absolute; TOP: 176px" runat="server" Text="Shut Down"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 328px; POSITION: absolute; TOP: 176px" runat="server" Text="Restart Windows"></asp:Button>
<asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 72px; POSITION: absolute; TOP: 64px" runat="server" Width="488px" Height="48px" Font-Bold="True" ForeColor="#000040">Sample Program to Show How to remotely Shutdown or Restart Windows</asp:Label>
</form>
</body>
</HTML>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 144px; POSITION: absolute; TOP: 176px" runat="server" Text="Shut Down"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 328px; POSITION: absolute; TOP: 176px" runat="server" Text="Restart Windows"></asp:Button>
<asp:Label id="Label1" style="Z-INDEX: 103; LEFT: 72px; POSITION: absolute; TOP: 64px" runat="server" Width="488px" Height="48px" Font-Bold="True" ForeColor="#000040">Sample Program to Show How to remotely Shutdown or Restart Windows</asp:Label>
</form>
</body>
</HTML>
remote.aspx.cs
CODE
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace restartWindows
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button2;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.WorkingDirectory = Request.MapPath("~/bin");
myProcess.StartInfo.FileName = Request.MapPath("~/bin/ShutdownSrv.bat");
myProcess.Start();
}
private void Button2_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.WorkingDirectory = Request.MapPath("~/bin");
myProcess.StartInfo.FileName = Request.MapPath("~/bin/RestartSrv.bat");
myProcess.Start();
}
}
}
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace restartWindows
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button2;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.WorkingDirectory = Request.MapPath("~/bin");
myProcess.StartInfo.FileName = Request.MapPath("~/bin/ShutdownSrv.bat");
myProcess.Start();
}
private void Button2_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.WorkingDirectory = Request.MapPath("~/bin");
myProcess.StartInfo.FileName = Request.MapPath("~/bin/RestartSrv.bat");
myProcess.Start();
}
}
}
Im /bin-Ordner liegen dann zwei Batch-Dateien, die mit dem shutdown-Befehl den Rechner ausschalten oder rebooten.
Habe leider herzlich wenig Ahnung von Programmierung und Webseiten, habe auf dem IIS ansonsten nur einen WSUS laufen.
Wenn ich die Dateien oben dann auf einem 2003er Server ohne WSUS kopiere und CodeBehind in src ändere, dann bekomme ich die Seite mit den zwei Buttons angezeigt und das Skript macht, was es soll. Das funktioniert auch mit dem ASP.NET-Server, der mit VisualStudio gestartet wird, wenn man sich das Projekt im Browser anzeigen lässt.
Auf meinem 2008er Server bekomme ich nur die Seite angezeigt, ein Klick auf die Buttons bewirkt nichts.
Also habe ich erstmal wild mit im IIS-Manager rumgespielt, bin aber nicht weiter gekommen. Auch im Eventlog habe ich keine hilfreichen Informationen gefunden. Ich schätze aber, dass die Batchdateien nicht aufgerufen werden oder nicht die richtigen Zugriffsrechte bestehen. Allerdings bin ich mit dem IIS7-Manager noch nicht besonders vertraut, so dass ich da nicht weiter komme.
Meine andere Vermutung ist, dass auf 2008 das NET1.1 nicht mehr so implementiert ist, wie ich das für mein Skript brauche. Daher habe ich gedacht, dass ich die Dateien vielleicht zu ASP.NET2.0 konvertieren muss. Leider habe ich keine Projekt- oder Solutions-Datei von VisualStudio2003, was mir ein automatisches Konvertieren in VS2008 erlauben würde.
Kann mir jemand weiter helfen, wie ich den IIS7 dazu bringe, die Batch-Dateien richtig aufzurufen? Und vielleicht hat noch jemand ein paar Tipps, wie ich die Berechtigungen so setze, dass die Seite nur aufgerufen werden kann, wenn man sich mit einem auf dem Server vorhandenen Konto anmeldet? Blicke da mit vererbten Berechtigungen usw. nicht durch.