以下是一些要求:
Applcation应该能够在给定服务器上统计,停止,启用和禁用服务/调度程序。
它应该能够在给定服务器上创建新的调度程序和安装服务
如果有办法使用网络应用程序实现这些目的,请告诉我。
答案 0 :(得分:0)
它不容易做到。您需要为安装和卸载服务创建单独的.bat文件。与需要为启动/停止/启用/禁用功能创建单独的.bat文件相同。
好的,使用System.Diagnostics.Process对象和静态方法从ASP.NET运行.BAT文件,这应该很简单,对吧?嗯,这可能适合你,但它肯定不适用于我的机器。在对这个问题进行了大量的研究之后,其他人似乎也遇到了这个问题。
我与权限和各种其他东西搏斗,试图让一个简单的批处理文件运行,没有运气。我尝试直接推送bat文件,启动cmd.exe并使用stin调用bat文件。没有骰子。似乎我的机器上的某些东西保持无人值守的进程来运行bat文件。这是有道理的,但我无法确定是什么阻止了这一点,所以我想出了一个解决方法。
我意识到,由于我可以成功运行cmd.exe,并通过stin向它发送命令,我可以打开批处理文件,并将每行发送到cmd.exe,这与运行批处理文件基本相同本身。这项技术效果很好,我想我会在这里传递代码。
// Get the full file path
string strFilePath = “c:\\temp\\test.bat”;
// Create the ProcessInfo object
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(“cmd.exe”);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardError = true;
psi.WorkingDirectory = “c:\\temp\\“;
// Start the process
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);
// Open the batch file for reading
System.IO.StreamReader strm = System.IO.File.OpenText(strFilePath);
// Attach the output for reading
System.IO.StreamReader sOut = proc.StandardOutput;
// Attach the in for writing
System.IO.StreamWriter sIn = proc.StandardInput;
// Write each line of the batch file to standard input
while(strm.Peek() != -1)
{
sIn.WriteLine(strm.ReadLine());
}
strm.Close();
// Exit CMD.EXE
string stEchoFmt = “# {0} run successfully. Exiting”;
sIn.WriteLine(String.Format(stEchoFmt, strFilePath));
sIn.WriteLine(“EXIT”);
// Close the process
proc.Close();
// Read the sOut to a string.
string results = sOut.ReadToEnd().Trim();
// Close the io Streams;
sIn.Close();
sOut.Close();
// Write out the results.
string fmtStdOut = “<font face=courier size=0>{0}</font>”;
this.Response.Write(String.Format(fmtStdOut,results.Replace(System.Environment.NewLine, “<br>”)));
就是这样!奇迹般有效!