How can I find the process id from the service name/handle in Delphi?

后端 未结 3 1248
无人共我
无人共我 2021-02-10 14:24

I have the service name for a windows service in delphi, and I know how to get the handle from that as well. What I need to do is stop a service, and if the stop fails for some

3条回答
  •  我寻月下人不归
    2021-02-10 14:59

    Or use DSiWin32 for many useful functions, including DSiGetProcessID. This code was written by StackOverflow user (and programmer) Gabr.

    Here's the function, for your own reference. It will give you what you are looking for:

    //Retrieves ID of the specified process. Requires Toolhelp API.
    //  @returns False if ID cannot be retrieved. Check GetLastError - if it is 0, process
    //       doesn't exist; otherwise it contains the Win32 error code.
    //  @author  gabr
    //  @since   2004-02-12
    //
      function DSiGetProcessID(const processName: string; var processID: DWORD): boolean;
      var
        hSnapshot: THandle;
        procEntry: TProcessEntry32;
      begin
        Result := false;
        hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if hSnapshot = 0 then
          Exit;
        try
          procEntry.dwSize := Sizeof(procEntry);
          if not Process32First(hSnapshot, procEntry) then
            Exit;
          repeat
            if AnsiSameText(procEntry.szExeFile, processName) then begin
              processID := procEntry.th32ProcessID;
              Result := true;
              break; // repeat
            end;
          until not Process32Next(hSnapshot, procEntry);
        finally DSiCloseHandleAndNull(hSnapshot); end;
      end; { DSiGetProcessID }
    

提交回复
热议问题