【问题标题】:Trigger an action in C# windows form from command line?从命令行触发 C# windows 窗体中的操作?
【发布时间】:2020-08-20 20:34:14
【问题描述】:

我已经进行了一些搜索,但我的问题的术语相互矛盾,如果可能的话,我很难找到我正在寻找的东西。

我想做的是运行一个 Windows 窗体 C# 程序并让它“监听”外部命令,最好是通过 Windows 命令行以某种方式发送。

用例是我有一些自动化软件,我必须与一些测试设备软件一起运行。在我测试的不同阶段,我需要在我的自动化软件中运行一个脚本(手动选择脚本并按下一个按钮)。但是,我可以在触发 Windows 命令行命令的测试软件中包含我的序列中的步骤。目标是向我正在运行的 C# 应用程序发送一个命令,该应用程序将加载我的脚本,进一步自动化该过程。

虽然我可以简单地重写我的自动化软件的较小版本,它是单次运行使用并使用命令行参数,但有一堆前导码表明,连接到某些硬件的自动化软件会使过程比手动在自动化软件中工作需要更长的时间。

是否可以在 C# 中创建外部挂钩?我不是在寻找完整的代码答案。我主要只需要此功能的名称,以便我可以查找并正确学习它。

希望我已经说得够清楚了。

编辑: 作为额外的信息,我只能访问我的自动化软件的源代码,而不是测试软件。我对测试软件的唯一选择是导出文件(我可能最终不得不轮询文件以了解自动化软件中的更改),或者运行 Windows CMD 命令。

【问题讨论】:

  • 这能回答你的问题吗? Passing Information Between Applications in C#
  • @IanKemp 我想我可以用其中一种技术(使用外部文件或剪贴板)破解一些东西,但不幸的是我无法访问测试软件源,只是我的自动化软件。我只能将某些内容真正导出到文件中,或者运行 CMD 命令。所以我将无法在测试软件中使用套接字、消息或任何需要特殊编码的东西。

标签: c# api


【解决方案1】:

您可以从 Ian Kemp 在 cmets 中发布的链接中看到,在应用程序之间传递信息的方式有多种。如果您正在寻找简单的东西,您可以使用 Windows 命令行在特定文件夹中创建一个文本文件。然后,您的 C# 应用程序可以监视该文件夹中的新文件、读取内容、删除文件并执行所需的操作。

这是一个从脚本创建文件的示例命令。我已使用文件名的日期和时间来尝试使其唯一。只要在创建文件之间有短暂的延迟,这应该没问题。否则你可能想用另一种方式命名文件,也许是增量数字?在我的系统上,日期和时间的格式为 dd/MM/yyyy HH:mm:ss。此示例将正斜杠和冒号替换为破折号以生成有效的文件名。您可能需要根据系统上的日期和时间格式进行调整。

echo some command > C:\SomeFolder\%date:/=-%-%time::=-%.txt

然后在您的 Win Forms C# 应用程序中,您可以执行类似的操作。您需要为 FileSystemWatcher 类添加 using System.IO;

private void Form1_Load(object sender, EventArgs e)
{
    FileSystemWatcher fileWatcher = new FileSystemWatcher()
    {
        Path = @".\", // Path of the directory you want to monitor
        Filter = "*.txt", // Filter for the file names
        NotifyFilter = NotifyFilters.LastWrite, // Raise an event when the write time of a file changes
        EnableRaisingEvents = true
    };
    fileWatcher.Changed += FileWatcher_Changed; // Subscribe to the file changed event
}

private void FileWatcher_Changed(object sender, FileSystemEventArgs e)
{
    // Read the contents of the file and delete it
    string command = File.ReadAllText(e.FullPath).Trim(); // ReadAllText() may not be the best option, but it's just an example
    File.Delete(e.FullPath);

    // Check the contents of the file and decide what to do
    if (command == "some command")
    {
        DoSomething();
    } 
    else if (command == "something else")
    }
        DoSomethingElse();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多