免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6467 | 回复: 10

win32::api 启动windows进程 [复制链接]

论坛徽章:
0
发表于 2010-12-15 16:36 |显示全部楼层
  1. #!/usr/bin/perl

  2. use Win32::API;
  3. use Win32::Process::List;

  4. sub KillProcess {
  5.     $pid = shift;
  6.     $OpenProcess = new Win32::API("kernel32.dll","OpenProcess",[I,I,N],N);
  7.     $PROCESS_ALL_ACCESS = 0x0001;
  8.     $hProcess = $OpenProcess->Call($PROCESS_ALL_ACCESS,0,$pid);

  9.     $TerminateProcess = new Win32::API( 'Kernel32.dll', 'TerminateProcess', [N,I], I );
  10.     $kill = $TerminateProcess->Call($hProcess,1);
  11. }

  12. $P = Win32::Process::List->new();
  13. %list = $P->GetProcesses();
  14. foreach (keys %list){
  15.     if($list{$_} ~~ "Runsrv.exe"){
  16.         KillProcess($_);
  17.     }
  18. }
复制代码
在网上找了找,发现这个关闭进程是可以的,已经测试过,但是如何启动一个程序的进程,小弟就不会了,CreateProcess()这个函数好像是可以做到,但是我实在不会win32 api,还请大师兄们帮帮忙。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-15 16:49 |显示全部楼层
不会就去学啊。知识不就这么一点一点来的麽。

论坛徽章:
0
发表于 2010-12-15 16:54 |显示全部楼层
回复 2# flw


    关闭进程就是改了大半天总算是搞定了,就是启进程搞不定,调用api函数,这事情不是几天就学会的,实在扛不住了,摸不着头绪,就到你的管辖范围请教高人。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-12-15 16:56 |显示全部楼层
为你好你还以为是压迫你呢。
真是没治了,爱咋咋地吧。祝你一路顺风,工作事事如意。

论坛徽章:
0
发表于 2010-12-15 17:00 |显示全部楼层
回复 4# flw


    贴出关闭代码,也是为了后人分享,不要绕路,总有人会用到,毕竟是一件方便自己,方便大家的好事,哎,埋头继续研究吧。

论坛徽章:
0
发表于 2010-12-15 18:05 |显示全部楼层
本帖最后由 黑色阳光_cu 于 2010-12-15 18:09 编辑
  1. use strict;
  2. use warnings;
  3. use Win32::Process;
  4. use Win32;

  5. Win32::Process::Create(my $ph, "c:/windows/system32/notepad.exe", "notepad temp.txt", 0, NORMAL_PRIORITY_CLASS, ".") or ErrorReport();

  6. sub ErrorReport
  7. {
  8.         Win32::MsgBox(Win32::FormatMessage(Win32::GetLastError()), MB_ICONSTOP | 0);
  9. }
复制代码

论坛徽章:
0
发表于 2010-12-17 12:11 |显示全部楼层
本帖最后由 lgq_101 于 2010-12-17 12:16 编辑

回复 6# 黑色阳光_cu


    你好,黑色阳光,你的代码我自己试了一下,代码运行没有报错,windows进程管理中确实也创建了notepad.exe进程,但实际上只是一个空进程,真正的temp.txt并没有启动,希望得到你的帮助。

  我的真实环境是这样,在windows服务器上 D:\Runsrv\Runsrv.exe 这个程序必须点起来,让它监听,但是我有好几十台服务器,不可能每台都远程连过去手动去点,太麻烦了,所以才打算用脚本实现下。

论坛徽章:
0
发表于 2010-12-17 12:30 |显示全部楼层
本帖最后由 黑色阳光_cu 于 2010-12-17 12:31 编辑
回复  黑色阳光_cu


    你好,黑色阳光,你的代码我自己试了一下,代码运行没有报错,windows进程管理 ...
lgq_101 发表于 2010-12-17 12:11



   
你是小白?
temp.txt在当前路径下吗?
你说的空进程概念,颠覆了操作系统的理论,估计很多教科书要修改了

论坛徽章:
0
发表于 2010-12-17 12:33 |显示全部楼层
回复 8# 黑色阳光_cu


    我学习perl只有不到一周时间,也是为了工作方便点,所以属于小白阶段,其实我已经尽力了。

论坛徽章:
0
发表于 2010-12-17 12:39 |显示全部楼层
回复  黑色阳光_cu


    我学习perl只有不到一周时间,也是为了工作方便点,所以属于小白阶段,其实我 ...
lgq_101 发表于 2010-12-17 12:33



   
这不是Perl的知识,而是操作系统的知识,听说很多windows用户连当前路径都不知道。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP