1

特定のプロセスが実行されているかどうかを確認する必要がある、作成中の C++ DLL があります。

dll が起動され、アプリケーションが次の場所で実行されます。

c:\Directory\application.exe

その中に別の実行可能ファイルがあるサブディレクトリがあります。

c:\Directory\SubDirectory\application2.exe

application2.exe が実行されていること、最も重要なのは、そのフォルダー内で実行されていることを確認する場合、実行時に DLL が行う必要があることです。複数のコピーが実行されているため、正しいコピーが実行されていることを確認する必要があります。

次のコードは、application2.exe が実行されていることを検出するのにうまく機能していますが、ファイル パスは考慮されていません。

HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);   

PROCESSENTRY32 pe = { 0 };  
pe.dwSize = sizeof(pe);  

if (Process32First(pss, &pe))   
{  
 do  
 {  
   if(wcscmp(pe.szExeFile, L"application2.exe") == 0)
   {
       CloseHandle(pss);
       return (1);      
   }
 }  
 while(Process32Next(pss, &pe));  
}   

CloseHandle(pss);

プロセスのパスが DLL を呼び出したアプリケーションのパスと一致することを確認するにはどうすればよいですか?

4

2 に答える 2

0

これには WMI を使用します。

コマンドラインから次のことができます。

wmic process where "executablepath = 'c:\path\to\executable.exe'" get ProcessId

C++ の WMI API を使用して、同様のことを行うことができます。

于 2013-07-29T10:57:07.793 に答える
0

ここで検索している他の誰かがいる場合に備えて、これに役立つ解決策が与えられました:

HANDLE ProcessSnap;
PROCESSENTRY32 Pe32;
unsigned int LoopCounter = 0;

Pe32.dwSize = sizeof(PROCESSENTRY32);
ProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

Process32First(ProcessSnap, &Pe32);

wchar_t TermPath[MAX_PATH];
GetModuleFileName(NULL, TermPath, MAX_PATH);
wstring WTermPath(TermPath);

int index = WTermPath.find(L"\\application.exe");
wstring Path = WTermPath.substr(0, (index));
Path = Path + L"\\SubDirectory\\Application2.exe";

do
{
    HANDLE Process;
    wchar_t FilePath[MAX_PATH];

    Process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, Pe32.th32ProcessID);

    if (Process)
    {
        GetModuleFileNameEx(Process, 0, FilePath, MAX_PATH);
        wstring WFilePath(FilePath);
        if(WFilePath == Path)
        {
            CloseHandle(ProcessSnap);
            return (1);      
        }           
        CloseHandle(Process);
    }

    LoopCounter++;
} while (Process32Next(ProcessSnap, &Pe32));

CloseHandle(ProcessSnap);
于 2013-07-29T13:35:13.463 に答える