現在做的一個項目,剛剛完成了所有組件的編譯連結,運行也沒問題。
但是每次運行看效果都得雙擊六個程式(四個視窗程序和二個命令列程式)。
就想著能不能做一個批處理一次運行了。
先想到的是bat指令碼,但因為有兩個命令列程式,且都是那種死迴圈不退出的那種,這造成在bat中開了第一個時卡住不運行第二個。
在網上找了一下關於如何讓其後台啟動並執行資料,都是關於VB方面的。
後來想PERL對於這種應該是小菜一碟吧,先在網上找,找到
1 system("Client.exe print");
和上面bat的問題一樣。
後來把PERL的協助文檔開啟,一看就看到了Win32::Process.
直接把例子COPY下來就能運行了。
但還是有兩個問題:
1. 兩個命令列程式都同時運行在一個命令視窗中.(和之前bat問題一樣)
2. 一些視窗程序本來是可以帶入參數,但就是不能正常運行。
1 #!/usr/bin/perl 2 3 use Win32::Process; 4 use Win32; 5 sub ErrorReport{ 6 print Win32::FormatMessage( Win32::GetLastError() ); 7 } 8 Win32::Process::Create($ProcessObj1, "Client.exe", "", 9 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport();10 sleep(5);11 Win32::Process::Create($ProcessObj2, "GndSystem.exe", "",12 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport();13 sleep(5);14 Win32::Process::Create($ProcessObj3, "LmiInterface.exe", "",15 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport();16 sleep(5);17 Win32::Process::Create($ProcessObj4, "Monitor.exe", "",18 0, NORMAL_PRIORITY_CLASS, ".")|| die ErrorReport();19 sleep(5);20 #Win32::Process::Create($ProcessObj6, 'C:\Sim.exe', 'PACARS.sim', 0, NORMAL_PRIORITY_CLASS, 'C:\SecureACARS\Database')|| die ErrorReport();21 system('C:\Sim.exe PACARS.sim');
另附上請空log檔案的perl指令碼:
1 #!/usr/bin/perl2 3 open $Log, '> C:\GPAComm.log';4 close $Log;5 open $Log, '> C:\CoreError.log';6 close $Log;7 open $Log, '> C:\GPAError.log';8 close $Log;
http://www.tianming.me/?p=830