gggggds 发表于 2015-12-27 11:21:01

在windows用perl运行exe

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