将 lmstat 输出到远程许可证服务器上的 C# 程序

本文关键字:服务器 程序 许可证 lmstat 输出 | 更新日期: 2023-09-27 18:35:40

我正在开发我的第一个C#程序。我创建了一个 GUI,您可以在其中选择组合框中的网络许可软件包,它会在文本框 (lmutil.exe) 中显示许可证使用情况和统计信息。

问题是:第一次从组合框中选择时,

没有任何反应,但是当您从组合框列表中选择另一个软件时,它会输出先前选择的软件的许可证统计信息。以下是我的代码:

 public partial class MainWindow : Window
 {
    public MainWindow()
    {
        InitializeComponent();
    }
    private void ComboBoxItem_Selected(object sender, RoutedEventArgs e)
    {
        if (ComboBox1.Text == "ComboItem1")
        {
            Process proc = new Process();
            proc.StartInfo.FileName = "lmutil.exe";
            proc.StartInfo.Arguments = "lmstat -a -c port@host";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.CreateNoWindow = true;
            // start the process
            proc.Start();
            string s = proc.StandardOutput.ReadToEnd();
            TextBox1.Text = s;

        }
        else
        {
            if (ComboBox1.Text == "ComboItem2")
            {
                Process proc = new Process();
                proc.StartInfo.FileName = "lmutil.exe";
                proc.StartInfo.Arguments = "lmstat -a -c port@host";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.CreateNoWindow = true;
                // start the process
                proc.Start();
                string s = proc.StandardOutput.ReadToEnd();
                TextBox1.Text = s;

            }
            else
            {
                if (ComboBox1.Text == "ComboItem3")
                {
                    Process proc = new Process();
                    proc.StartInfo.FileName = "lmutil.exe";
                    proc.StartInfo.Arguments = "lmstat -a -c port@host";
                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.RedirectStandardOutput = true;
                    proc.StartInfo.CreateNoWindow = true;
                    // start the process
                    proc.Start();
                    string s = proc.StandardOutput.ReadToEnd();
                    TextBox1.Text = s;
                }
    }
}

将 lmstat 输出到远程许可证服务器上的 C# 程序

不确定您正在使用什么 GUI 库(Window 不是我认识的类,(我使用 WinForms)),但以下内容似乎对我有用(用真正的端口和主机名代替三个项目之一(我只有一个许可证服务器要测试))。

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
    private void comboBox1_SelectedIndexChanged(Object sender, EventArgs e){
        switch (this.comboBox1.Text){
            case "item1":
                this.textBox1.Text = this.getLMStat(158, "ONE");
                MessageBox.Show("DONE");
                break;
            case "item2":
                this.textBox1.Text = this.getLMStat(158, "TWO");
                MessageBox.Show("DONE");
                break;
            case "item3":
                this.textBox1.Text = this.getLMStat(158, "THREE");
                MessageBox.Show("DONE");
                break;
            default:
                MessageBox.Show("Unsupported Value");
                break;
        }
    }
    private String getLMStat(int port, String server){
        try {
            Process proc = new Process();
            proc.StartInfo.FileName = "lmutil.exe";
            proc.StartInfo.Arguments = "lmstat -a -c " + port + "@" + server;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.CreateNoWindow = true;
            // start the process
            proc.Start();
            return proc.StandardOutput.ReadToEnd();
        }
        catch (Exception){return "Do something with Exception";}
    }
}

消息框在那里,以便您知道 lmstat 何时返回,因为它会挂起一段时间(尤其是当端口和/或主机无效时)。

您是否正在处理组合框选择更改的正确事件?

Process.Start()启动进程,但不等待它完成。 您可以在string s = proc.StandardOutput.ReadToEnd();后立即致电proc.WaitForExit()