请问应该如何才能获取某个执行文件的路径?
比如我想知道IEXPLORE.EXE这个文件的具体位置,然后去调用它。
IEXPLORE只是举个例子,有些是自己安装的应用软件。

解决方案 »

  1.   

    我用ExtractFilePath('IEXPLORE.EXE')或者ExtractFilePath('EXPLORE')得到的都是空值。
      

  2.   

    http://topic.csdn.net/t/20050306/23/3829184.html
      

  3.   

    那个是根据已运行的进程来获得路径,我是要知道没运行的程序。
    比如说装了个QQ,那每个人装的目录都不一样,那我想先找到该QQ可执行程序的路径,然后去调用这个可执行文件。
    QQ只是举个例子,我想知道任意一可执行文件的位置。谢谢
      

  4.   

    showmessage(extractfiledir(application.ExeName));
      

  5.   

    uses   
          TlHelp32,psapi;   
      function   GetPathFileofModule(ModuleName:String):String;   
      var   
          hProcSnap:   THandle;   
          pProcess:   THandle;   
          pe32:   TProcessEntry32;   
          s:   string;   
          buf:array[0..MAX_PATH]   of   char;   
          hMod:HMODULE;   
          cbNeeded:DWORD;   
      begin   
          hProcSnap   :=   CreateToolHelp32SnapShot(TH32CS_SNAPALL,   0);   
          if   hProcSnap   =   INVALID_HANDLE_VALUE   then   Exit;   
          pe32.dwSize   :=   SizeOf(ProcessEntry32);   
          if   Process32First(hProcSnap,   pe32)   =   True   then   
              while   Process32Next(hProcSnap,   pe32)   =   True   do   
              begin   
                      if   uppercase(pe32.szExeFile)=uppercase(ModuleName)   then   
                      begin   
                            pProcess:=OpenProcess(PROCESS_QUERY_INFORMATION   or   
                                                                                    PROCESS_VM_READ,   
                                                                                    FALSE,   
                                                                                    pe32.th32ProcessID);   
                            if   pProcess<>0   then   
                            begin   
                                  if   EnumProcessModules(   pProcess,@hMod,sizeof(hMod),cbNeeded)   then   
                                  begin   
                                        ZeroMemory(@buf,MAX_PATH+1);   
                                        GetModuleFileNameEx(pProcess,   hMod,buf,MAX_PATH+1);   
                                        Result:=strpas(buf);   
                                  end;   
                            end;   
                      end;   
              end;   
          CloseHandle(hProcSnap);   
      end;   
      ------------------------------------   
      调用方法:   
      ShowMessage(GetPathFileofModule('program.exe'));
      

  6.   

    showmessage(extractfiledir(application.ExeName));是得到该运行程序的目录,而不是得到某个运行程序的目录。
    我的说明很清楚了:
    比如你写了个程序,编译完后是a.exe,你执行a.exe,里面有个按纽,该按纽的功能是要知道你系统里安装的QQ的这个可执行文件的具体路径,而不是要得到a.exe这个文件的路径。我查了很多帖子,好象showmessage(extractfiledir(application.ExeName));这个答案最多,也最忽悠人。完全就不看帖子的问题的,只看到"可执行文件、路径"就copy ,paste
      

  7.   

    还有:“我用ExtractFilePath('IEXPLORE.EXE')或者ExtractFilePath('EXPLORE')得到的都是空值。”------这是你在一楼说的话。从这句话里,可以看出你或许对DOS/Windows系统的文件管理模式了解不透彻。
      

  8.   

    右击“开始”菜单,单击“查找”,这时,你仔细看一下文件搜索器的面板,它是要确定欲搜索的文件的位置的。如果你只知道这个文件在硬盘上,那就要把所有硬盘都选中。这就是上面说的遍历硬盘的所有分区。而查注册表,仅限于在Windows注册表有记载信息的程序。你可以网上查阅相关的注册表项是哪一个。
      

  9.   

    浩方我不晓得你玩过没,比如说你进入的是星际,那点他的启动按纽,那就会运行你本地的星际游戏。
    -----------------没玩过。但我可以给你肯定地说:如果不是在注册表或INI或Recent等类似的特定位置储存该程序的信息,那它只有遍历整个硬盘!
    并不是所有的程序都会为你留下这些信息的!
      

  10.   

    其实按LZ的意思,我在D盘有个a.exe,在E盘有个a.exe,在F盘有个a.exe;
    我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
    估计最后电脑都会疯掉了.
      

  11.   

    Uses Registry;
    .............
    var
      reg:Tregistry; //定义注册表类
      qqpath,IEpath:string; 
    begin
      reg:=Tregistry.Create;//创建注册表项
      reg.RootKey:=HKEY_LOCAL_MACHINE;//定义主键所在的根键
      reg.OpenKey('SOFTWARE\Classes\Applications\iexplore.exe\shell\open\command',true);
      IEpath:=reg.ReadString('');//取IE路径,得到的是 c:\xxxx....\iexplorer.exe %1
      IEpath:=copy(copy(IEpath,1,length(IEpath)-2);//去掉最后的 %1
      IEpath:=ExtractFilePath(IEpath);//取路径
      reg.CloseKey;
      //用同样的方法取QQ路径
      reg.OpenKey('software\Tencent\QQ',true);
      qqpath:=reg.ReadString('Install');//取到路径
      reg.CloseKey;
      reg.Destroy;
    end;
      

  12.   

    dongycumt(阡陌) ( ) 信誉:100    Blog 
    其实按LZ的意思,我在D盘有个a.exe,在E盘有个a.exe,在F盘有个a.exe;
    我点击一个调用a.exe的按钮,就会运行3个a.exe,楼主感觉可行么?
    估计最后电脑都会疯掉了
    =========================
    呵呵,兄弟还真以为我无耻到这种地步吧?
    当然是调用一些正常程序啊。
    比如A按纽,点完就打开QQ,B按纽点完打开OFFICE,C按纽点完打开***,当然了如果
    是会存在2个一样的文件名,但程序是我写的,我不会去写那个的。
    你们都想太多了,我只是想方法而已。具体说会造成什么情况,会多慢,会多复杂,那
    是属于另外的问题了。
    都还没有挣到钱,就担心钱花不出去
      

  13.   

    reg.OpenKey('SOFTWARE\Classes\Applications\iexplore.exe\shell\open\command',true);
    b43ok(网络骑士)  如果不知道要查找的文件在注册表中的路径在哪里要怎么找? 只给出一个可执行文件如:gbak.exe   //在borland\interbase\bin目录下