【问题标题】:How to get command line arguments for a running process如何获取正在运行的进程的命令行参数
【发布时间】:2010-09-18 16:59:36
【问题描述】:

在我的程序中,当我使用 mxmlc 的命令行编译命令。该错误与 嵌入的字体名称没有被 flex 正确识别 系统字体列表。

但是,一时兴起,我决定将代码复制到 Flex Builder 并 在那里编译它。令我惊讶的是,它奏效了,而且它找到了合适的 使用我给定的相同系统名称的字体 (PMingLiU)。

我怀疑我的问题可能是语言环境问题,并且我的系统无法 由于语言环境的考虑,正确识别字体名称。

我尝试将编译代码的语言环境设置为 en_US,设置为 no 利用。所以我想问一下这里是否有人知道Flex Builder是如何调用MXML编译器的,与直接运行mxmlc相比有什么区别?我们知道它没有直接使用 mxmlc.exe,因为我们尝试用我们自己的可执行文件替换 mxmlc 来捕获命令行参数。

如果重要的话,使用的操作系统是 Windows XP。

【问题讨论】:

    标签: apache-flex flexbuilder


    【解决方案1】:

    虽然我没有您的问题的确切答案(Flex Builder 传递给 mxmlc.exe 的命令行参数是什么),但我确实为您提供了元答案。您可以使用以下两种方法之一找到命令行。

    第一个与平台无关,但需要您编译一个小型 C++ 程序。我以前在解决类似问题时使用过这种方法。您可以做的是创建一个简单地将命令行输出到文件的包装应用程序。构建此应用程序并将其作为 mxmlc.exe 的临时替代品放入,当 Flex Builder 执行它时,您将能够访问生成的文件“cmdline.txt”以获取调用它的完整命令行:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
      ofstream cmdLine;
      cmdLine.open("cmdline.txt");
    
      for (int i = 0; i < argc; i++) {
        cmdLine << argv[i];
        if (i < argc)
          cmdLine << " ";
      }
    
      cmdLine.close();
      return 0;
    }
    

    如果您对在 Flex Builder 上玩这个肮脏的把戏感到不妥,假设您在 Windows 上运行,还有另一种选择。您可以使用WMI 遍历所有正在运行的进程并获取它们的命令行信息。 Ruby 是我选择的语言,这需要您安装适用于 Windows 的 Ruby 解释器,您可以使用 One-Click Ruby Installer for Windows 轻松完成。

    安装后,只要 Flex Builder 开始构建,就运行此脚本:

    require 'win32ole'
    wmi = WIN32OLE.connect("winmgmts://")
    processes = wmi.ExecQuery("select * from win32_process")
    
    for process in processes do
        cmdLine = process.CommandLine
        puts "Command line: #{cmdLine}" if cmdLine =~ /mxmlc/
    end
    

    我添加了一个正则表达式,仅打印命令行中以“mxmlc”启动的进程的命令行(应该可以满足您的需要)。对于迭代每个进程的更通用的解决方案,只需删除包含以下内容的行末尾的 if 子句:

    puts "Command line: #{cmdLine}" if cmdLine =~ /mxmlc/
    

    这将为您省去使用 StartRemoteThread 执行任何低级魔法和在 PEB 结构中导航的麻烦。

    考虑到您的问题的性质,并且没有关于您的开发操作系统的更多信息,这是我能做的最好的事情。如果这解决了您的问题,我可能会建议您编辑您的帖子,以便遇到类似问题的人可以找到此解决方案。像“如何获取正在运行的进程的命令行参数”这样的标题可能更贴切。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多