【问题标题】:Getting Output from a Windows App Using PHP使用 PHP 从 Windows 应用程序获取输出
【发布时间】:2009-05-11 17:46:03
【问题描述】:

我的老板有一个他编写的 Windows 应用程序。它不是一个 Windows 控制台应用程序,而是一个 Windows GUI 应用程序。我们当然有源代码,但他不希望它成为控制台应用程序。他希望它仍然是一个常规的 GUI 应用程序。

问题是,他希望能够从 PHP 调用它,向它传递参数,并让应用程序将信息返回给调用 PHP 脚本。我可以轻松调用 Windows 控制台应用程序并读取输出。我什至可以调用 VBS 脚本并从中获取输出。

但是,我们不知道如何让常规 Windows 应用程序将数据输出到调用 php 脚本,而无需将输出写入文本文件并从 php 中读取。

有人能做到这一点吗?如果有,怎么做?

提前致谢。

艾米


编辑添加:显然,老板把这段代码放在他的应用程序中:

BOOL bConsole = AllocConsole();
 HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 DWORD dwCharsWritten = 0;
 string sS3Path = sCommandLine.substr(sCommandLine.find("S3://") + 5);
 string sMessage = "S3 Path: " + sS3Path;

 BOOL bWritten = WriteConsole(hOutput, sMessage.c_str(), sMessage.size(), &dwCharsWritten, NULL);

但是,php 没有看到他正在写入此控制台的信息。我们尝试了 exec 和 shell_exec 无济于事。

【问题讨论】:

    标签: php windows


    【解决方案1】:

    这里最好的方法是添加一个命令行开关,这将使您的应用程序在指定时表现得像控制台应用程序,否则是 GUI。

    从 GUI 应用程序中检索信息是不可能的,除非它通过标准输出或文件发送输出。

    【讨论】:

    • 显然这很重要,因为选择作为 GUI 应用程序或控制台应用程序运行应用程序是在应用程序的构建时做出的,而不是在运行时 - 你不能 真的根据命令行开关进行选择。见:stackoverflow.com/questions/54536/…
    • 就像我说的,表现得像...即使它是一个 GUI 应用程序,您仍然可以将信息通过管道传输到标准输出。控制台窗口不会出现,但其他程序仍然可以读取信息。
    【解决方案2】:

    最好的方法是正确地重新构建 Windows GUI 应用程序中的逻辑,使其作为 COM 组件公开。 GUI 应用程序和 PHP 脚本都可以调用 COM 组件,并使用相同的逻辑。

    在这种情况下,数据交换不需要也可能不应该通过文本进行。您可以通过设置和读取 COM 组件上的类型属性来进行数据交换。

    这就是 COM 的用途。 PHP 当然有一个成熟的库,用于在 Windows 上调用 COM 组件。

    从 Web 应用程序调用 GUI 应用程序是一个非常糟糕的主意。你在问这样做的问题。 COM 方法更受欢迎。

    更新:PHP COM DOC

    【讨论】:

      【解决方案3】:

      您可以将参数传递给 win 表单应用程序,就像传递给命令行应用程序一样。在 main 方法中使用 arguments 参数。

      这将需要对您的 winforms 应用程序进行一些修改,但它允许您从 php 调用 exe,并传入一些参数。

      我不确定您的业务需求是什么,但理想情况下,应用程序是用业务域和 GUI 分开编写的,因为您很可能不需要此 cmd 行进程来拥有 winforms 应用程序的所有功能,而是从某些输入中产生正确的输出,在不重写任何业务逻辑的情况下实现应用程序的 cmd 版本应该没什么大不了的。

      【讨论】:

        【解决方案4】:

        我们的最终解决方案是让我的老板修改他的 Windows 应用程序。他能够从应用程序中写入控制台,然后我们可以将输出读取到该控制台。

        艾米

        【讨论】:

          猜你喜欢
          • 2019-06-05
          • 2012-02-25
          • 2013-02-28
          • 2013-10-01
          • 1970-01-01
          • 2020-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多