0

我正在尝试编写一个小型 Windows 窗体 GUI,它将接收 WMI 查询的文本,并将该 WMI 查询的输出/结果显示在窗体上的文本框中。

出于测试目的以证明一切正常,我试图让 GUI 将 WMI 输出写入命令行控制台,但到目前为止我没有显示输出的运气。

我哪里错了(我是 C# 新手,所以这将是一个很长的列表!)?

这是我正在使用的表单背后的代码......

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management; 

namespace WMI_Form1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_runQuery_Click(object sender, EventArgs e)
        {
            string _userName = textBox1_userName.Text;
            string _passWord = textBox2_password.Text;
            string _serverName = textBox3_serverName.Text;
            string _wmiQuery = textBox4_queryInput.Text;

            EnumServices(_serverName, _userName, _passWord);
        }

        static void EnumServices(string host, string username, string password)
        {
            string ns = @"root\cimv2";
            string query = "SELECT * FROM Win32_LogicalDisk";
            //string query = "select * from Win32_Service";

            ConnectionOptions options = new ConnectionOptions();
            if (!string.IsNullOrEmpty(username))
            {
                options.Username = username;
                options.Password = password;
            }

            ManagementScope scope =
                new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options);
            scope.Connect();

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, new ObjectQuery(query));

            ManagementObjectCollection retObjectCollection = searcher.Get();

            foreach (ManagementObject mo in searcher.Get())
            {
                 Console.WriteLine("Trying to output the results...");
                 Console.WriteLine(mo.GetText(TextFormat.Mof));     
            }  
        }
    }
}
4

1 回答 1

1

因为您的项目是“Windows”应用程序而不是“控制台”应用程序,所以您没有显示/附加的控制台窗口......因此Console.WriteLine输出无处可去。

而不是通过为您的 GUI 应用程序创建“控制台”的麻烦(例如,通过AllocConsole- http://msdn.microsoft.com/en-us/library/windows/desktop/ms682528(v=vs.85).aspx ) 这将允许您Console.WriteLine看到您的输出....在这种情况下没有必要...因为最终您将输出到 ListBox...您只是想要一种快速“查看”数据的方法。

最快的方法是使用“Trace”或“Debug”输出语句:

Debug类和Trace类有什么区别?):

所以:

System.Diagnostics.Trace.WriteLine("Trying to output the results...");
System.Diagnostics.Trace.WriteLine(mo.GetText(TextFormat.Mof));

或者

System.Diagnostics.Debug.WriteLine("Trying to output the results...");
System.Diagnostics.Debug.WriteLine(mo.GetText(TextFormat.Mof));

如果您从中运行程序的“调试”版本,则输出将出现在 Visual Studio 的“输出”窗口中。

如果您在 Visual Studio 之外启动程序,则可以使用 DebugView ( http://technet.microsoft.com/en-gb/sysinternals/bb896647.aspx ) 查看调试输出。

确认它工作正常后,您可以输入逻辑以将输出添加到 aListBox中。

于 2013-09-09T17:57:25.343 回答