现在做的一个项目,刚刚完成了所有组件的编译链接,运行也没问题。
但是每次运行看效果都得双击六个程序(四个窗口程序和二个命令行程序)。
就想着能不能做一个批处理一次运行了。
先想到的是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/perl 2 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