尽管我对您的问题没有确切的答案(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 结构中导航的麻烦。
考虑到您的问题的性质并且没有有关您的开发操作系统的更多信息,这是我能做的最好的事情。如果这解决了您的问题,我可能会建议您编辑您的帖子,以便遇到类似问题的人可以找到此解决方案。像“如何获取正在运行的进程的命令行参数”这样的标题可能更贴切。