using System;
using System.ComponentModel;
using System.Diagnostics;
namespace Masuit.Tools.Win32
{
///
/// 命令提示符
///
public static class WindowsCommand
{
///
/// 生成真正的随机数
///
///
///
///
public static int StrictNext(this Random r, int seed = Int32.MaxValue)
{
return new Random((int)Stopwatch.GetTimestamp()).Next(seed);
}
///
/// 产生正态分布的随机数
///
///
/// 均值
/// 方差
///
public static double NextGauss(this Random rand, double mean, double stdDev)
{
double u1 = 1.0 - rand.NextDouble();
double u2 = 1.0 - rand.NextDouble();
double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2);
return mean + stdDev * randStdNormal;
}
///
/// 执行一个控制台程序,并获取在控制台返回的数据
///
/// dos/cmd命令
/// 等待执行时间毫秒值,默认不等待
/// 控制台输出信息
/// 尚未设置进程 ,而且不存在可从其确定 属性的 。- 或 -没有与此 对象关联的进程。- 或 -您正尝试为远程计算机上运行的进程调用 。此方法仅对本地计算机上运行的进程可用。
/// 未能访问该等待设置。
/// 命令参数无效,必须传入一个控制台能被cmd.exe可执行程序; 如:ping 127.0.0.1
public static string Execute(string dosCommand, int outtime = 0)
{
string output = "";
if (!string.IsNullOrEmpty(dosCommand))
{
using (Process process = new Process()) //创建进程对象
{
ProcessStartInfo startinfo = new ProcessStartInfo(); //创建进程时使用的一组值,如下面的属性
startinfo.FileName = "cmd.exe"; //设定需要执行的命令程序
//以下是隐藏cmd窗口的方法
startinfo.Arguments = "/c" + dosCommand; //设定参数,要输入到命令程序的字符,其中"/c"表示执行完命令后马上退出
startinfo.UseShellExecute = false; //不使用系统外壳程序启动
startinfo.RedirectStandardInput = false; //不重定向输入
startinfo.RedirectStandardOutput = true; //重定向输出,而不是默认的显示在dos控制台上
startinfo.CreateNoWindow = true; //不创建窗口
process.StartInfo = startinfo;
if (process.Start()) //开始进程
{
if (outtime == 0)
{
process.WaitForExit();
}
else
{
process.WaitForExit(outtime);
}
output = process.StandardOutput.ReadToEnd(); //读取进程的输出
}
}
return output;
}
throw new Exception("命令参数无效,必须传入一个控制台能被cmd.exe可执行程序;\n如:ping 127.0.0.1");
}
}
}