使用Web应用程序的Windows服务和调度程序管理

时间:2016-09-01 07:02:56

标签: .net

以下是一些要求:

Applcation应该能够在给定服务器上统计,停止,启用和禁用服务/调度程序。

它应该能够在给定服务器上创建新的调度程序和安装服务

如果有办法使用网络应用程序实现这些目的,请告诉我。

1 个答案:

答案 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>”)));

就是这样!奇迹般有效!