2008-10-23 114 views
2

在我的程序中,当我使用针对mxmlc的 命令行编译命令时,我一直收到错误。该错误与 系统字体列表中的 嵌入字体名称未被flex正确标识有关。如何获取正在运行的进程的命令行参数

但是,我决定将代码复制到Flex Builder中,然后 将其编译到那里。令我惊讶的是,它的工作,并找到了正确的 字体使用我已经给(PMingLiU)相同的系统名称。

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

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

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

回答

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结构。

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

相关问题