请问如何在已知主程序文件名(或主进程名)的情况下,如何获知该主程序(或主进程)所属软件的安装目录(100分)

  • 主题发起人 主题发起人 hzrforever
  • 开始时间 开始时间
H

hzrforever

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在已知主程序文件名(或主进程名)的情况下,如何获知该主程序(或主进程)所属软件的安装目录,我是想通过程序来或的!
 
function GetImagePath(PID:dword):string;<br> &nbsp;var<br> &nbsp;ProcHand: THandle; //进程的句柄<br> &nbsp;ModHand: array[0..1024] of HMODULE; //模块的句柄<br> &nbsp;ModName: array[0..MAX_PATH] of char;//模块文件名<br> &nbsp;count:dword;<br>begin<br> &nbsp; &nbsp; &nbsp; &nbsp;result:='';<br> &nbsp; &nbsp; &nbsp; &nbsp;ProcHand := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,<br> &nbsp; &nbsp; &nbsp; &nbsp; False, PID);<br> &nbsp; &nbsp; &nbsp; &nbsp;if ProcHand=ERROR_INVALID_ACCESS &nbsp;then exit;<br> &nbsp; &nbsp; &nbsp; &nbsp;//列举进程所有的模块<br> &nbsp; &nbsp; &nbsp; &nbsp;EnumProcessModules(Prochand, @ModHand,sizeof(ModHand) , Count);<br> &nbsp; &nbsp; &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp; &nbsp;//取第一个模块名就是进程路径<br> &nbsp; &nbsp; &nbsp; &nbsp; if GetModuleFileNameEx(ProcHand, ModHand[0], ModName,SizeOf(ModName)) &gt; 0 &nbsp;then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result:=strpas(modname);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp; &nbsp; finally<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CloseHandle(ProcHand);<br> &nbsp; &nbsp; &nbsp; &nbsp; end;<br>end;
 
可以根据进程获取其全路径,去掉后面的文件名就是它的父级目录了
 
谢谢以上2位的回答,我再问一下,那如果程序并未运行,那又该如何操作呢,我看过有很多软件在进行补丁安装,升级时只要一运行补丁文件棋他什么都是自动进行的那他是如何或的程序的安装目录的呢,最明显的一个例子就是汉化了,很多高人做好汉化包后我们只要一运行他就自动的把软件安装目录下的资源文件替换掉了,而这时软件的主程序并未运行,我就是想知道这种情况下如何获得该路径?
 
原来的程序把路径信息写入到注册表.汉化包运行时从注册表得到路径信息.
 
程序安装是在注册表中写的安装信息,你只要读出来就可以了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部