2008-10-23 35 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結構。

這是關於我能做的最好考慮你的問題的性質,沒有關於你的開發操作系統的更多信息。如果這解決了您的問題,我可能會建議您編輯您的帖子,以便面臨類似問題的人可以找到此解決方案。像「如何獲得正在運行的進程的命令行參數」這樣的標題可能更適合。

相關問題