C#调用Windows cmd那些事【内含踩坑秘籍】

4 篇文章 0 订阅
本文介绍了如何在C#中通过命令行获取系统信息,如物理网卡地址和CPU信息,针对Windows和Linux平台提供了不同的处理方式。在Windows下,利用`RuntimeInformation.IsOSPlatform`进行平台判断,并通过`Process`类执行cmd命令获取信息。遇到命令执行失败的问题,可能是因为命令未配置到环境变量。文章还提醒注意避免命令行窗口闪烁及确保命令正确性。
摘要由CSDN通过智能技术生成

有时候,在开发过程中会遇到一些问题,比如获取系统的一些东西:物理网卡地址、CPU 信息等。使用微软相关库会遇到跨平台、微软相关环境的问题,在此,你不如来试试通过cmd执行命令行获取。

C#为例,先说一下平台判断吧。

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    // TODO Windows平台这么干
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    // TODO Linux平台这么干
}

Windows平台这么执行cmd命令:

/// <summary>
/// 命令行执行
/// </summary>
/// <param name="cmd">待执行命令行</param>
/// <returns>string</returns>
private static string InvokeCmd(string cmdArgs)
{
    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;
    p.Start();

    p.StandardInput.WriteLine(cmdArgs);
    p.StandardInput.WriteLine("exit");
    string Tstr = p.StandardOutput.ReadToEnd();
    p.Close();
    return Tstr;
}

Windows平台这么执行cmd怎么调用呢?

try
{
    // 待执行的命令
    string cmdStr = "";
    // 获取执行结果
    string Str = InvokeCmd(cmdStr);
    // 按行处理执行结果
    string[] Shows = Str.Split("\n");
    // TODO
}
catch (Exception e)
{
    // 异常了写点日志,日志代码这里就不贴了
    LogUtils.WriteLog("异常:" + e.Message);
    return "";
}

结束。

那是不可能的,下面上踩坑秘籍:

1、C++实现 会有一个黑框一闪而过,不建议使用。

2、有时候获取不到数据

可能是没有调用到相关命令

可以在cmd中运行一下你执行的命令,就像这样:

 然后提示说不是内部命令,也不是可运行程序或批处理文件。

只需要找到计算机中该命令位置,配置到环境变量Path即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值