【问题标题】:Input from forms can't execute .bat file来自表单的输入无法执行 .bat 文件
【发布时间】:2015-06-21 00:56:29
【问题描述】:

大家好,我已经创建这个程序一天了。但似乎我无法让它工作。我想要的是,我有一个 Windows 窗体,它将获取 IP 地址输入并执行一个 .bat 文件。

@echo off
wmic /node:x computersystem get username 

其中 x 是我的 IP 的字符串变量。 该命令将打印出当前登录的用户名。

这是我的 C# 代码:

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace wmic_forms
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }
    public string x;
    private void button1_Click(object sender, EventArgs e)
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "C:\\ken.bat";
        Process p = Process.Start(psi);
        string strOutput = p.StandardOutput.ReadToEnd();
        //p.WaitForExit();
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.Arguments = textBox1.Text;

        MessageBox.Show(strOutput);
        //Console.WriteLine(strOutput);
        //Console.ReadLine();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
       //my input text box for IP
        x = textBox1.Text;
    }
  }
}

代码运行没有错误。但它只会从 .bat 文件中打印出整个字符串。请给我反馈,告诉我如何将变量 x 传递给 .bat 文件并执行它的命令。

【问题讨论】:

    标签: c# windows batch-file


    【解决方案1】:

    您不需要批处理文件来执行此操作,只需使用这些参数运行wmic。而且您尤其不需要遵循将文件存储在系统文件夹(如 C: 驱动器)中的恶意软件做法。

    至于代码中的具体问题,您是在之后设置进程对象的属性,而不是之前。当然它们不再重要了。

    当我们讨论重构的主题时,我会提醒您,启动脚本链已经不是 1985 年了,因为操作系统不会暴露其内部工作原理。您可以使用托管类直接从 C# 轻松访问 WMI API:https://msdn.microsoft.com/en-us/library/system.management.managementscope(v=vs.110).aspx

    【讨论】:

    • 您好,Blindy——感谢您的快速回复。现在,我正在试验 c#-->bat-->c# 方法以了解其背后的概念。正如我所说,我仍然是一个初学者,想要以艰难的方式做事。不过谢谢你的建议,我试试这个,直接执行命令。会让你知道输出。非常感谢。 :)
    • “至于代码中的具体问题,您是在启动进程对象之后而不是之前设置进程对象的属性。当然它们不再重要了。” ----- 你能给我具体的代码行吗?谢谢你:)
    • 流程结构由Process.Start 使用,之后您对其所做的任何更改都是无用的——这些更改启用了标准输出重定向,这就是您无法从中获得任何东西的原因。同样,您应该直接使用 WMI 查询,而不是启动其他脚本来做同样的事情。
    • 已经编辑了我的代码。而且我认为它已经在做它应该做的事情。但我认为我的表单输入没有通过 bat 文件传递​​,它是否说“node-x,错误,描述:..”有任何反馈吗?
    • 它们没有通过,因为正如我在创建流程后将它们添加到结构之前所说的那样。你一直忽略这一点。除了你的批处理文件从不使用传递给它的参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多