搜索
查看: 573|回复: 5

获取由pid取64位程序路径问题

[复制链接]

8

主题

67

帖子

449

积分

二级会员

Rank: 3Rank: 3

积分
449
发表于 2017-11-5 12:51:57 | 显示全部楼层 |阅读模式
获取由pid取64位程序路径问题

processfullPath=process.getPath(pid);

如果此程序是32位的,可以通过以上的pid来获取路径,但如果此程序是64位的,就获取到了null值,请教各位还有什么办法可以获取路径呢
回复

使用道具 举报

8

主题

67

帖子

449

积分

二级会员

Rank: 3Rank: 3

积分
449
 楼主| 发表于 2017-11-5 15:20:23 | 显示全部楼层
本帖最后由 im286 于 2017-11-5 15:21 编辑
  1. prcs = io.popen("wmic.exe process get executablepath,processid|findstr 5080");
  2. str = prcs.read(-1) //读取返回数据
  3. io.print("管道获取的文本=",str)
复制代码


自己找到个折中的方法,只能用dos管道了 其中5080就是pid
回复

使用道具 举报

2

主题

39

帖子

301

积分

二级会员

Rank: 3Rank: 3

积分
301
发表于 2017-11-5 23:40:27 | 显示全部楼层
WMI呀
回复

使用道具 举报

156

主题

2426

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13333
发表于 2017-11-6 11:00:37 | 显示全部楼层
今天我已经改进了这个函数可以取到了,之前因为这个功能在XP上要在process导入sys.volume这个库,觉得这个功能不是很常用,自己创建的进程已经知道路径,取别人的进程的路径也没什么意义,所以没有加到标准库里,什么事都要做完美,那要添加的代码无穷无尽。

类似遇到这种问题,可以网上搜一下,其实可以说是Windows的一个BUG,Win10 用原来的GetModuleFileNameEx已经可以直接取到路径了,用 process(pid).getPath() 就可以,但是win7就需要用 QueryFullProcessImageName,至于XP就最麻烦,要用 GetProcessImageFileName,而且返回的路径还要做转换。
回复

使用道具 举报

156

主题

2426

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13333
发表于 2017-11-6 11:25:31 | 显示全部楼层
im286 发表于 2017-11-5 15:20
自己找到个折中的方法,只能用dos管道了 其中5080就是pid

用管道一般没必要用 io.popen,会弹DOS窗口,
用 process.popen 就可以,例如:
import console;
import process.popen

getProcessPaths =
function(){
   
var tab  = {};
   
var prcs = process.popen("wmic.exe","process get executablepath,processid");  
   
for line in string.lines(prcs.read(-1) ) {
        
var path,pid,c = string.match(line,"(\S.+)\s+(\d+)(\s+)$");
        
if(pid && #path)tab[pid+0] = path;
    }   
   
return tab;
}

console.varDump( getProcessPaths() );
console.pause(
true);
      
另外,aardio可以直接调用WMI,不需要用管道,例如:
import console;
import com;

var wmi = com.GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2")
var objs = wmi.InstancesOf("Win32_Process") ;
for index,obj in com.each(objs) {
    console.log(obj.executablepath,obj.processid)
}

console.pause();
  

点评

同意: 5.0 真棒: 5.0
继续努力: 5.0
同意: 5 真棒: 5 继续努力: 5
谢谢  发表于 2017-12-27 12:55
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-5-28 11:19 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表