Podczas instalacji Oracle Client 10g generowany jest błąd "The procedure entry point GetProcessImageFileNameW could not be located in the dynamic link library PSAPI.DLL". Z komunikatu błędu wynika, że w pliku "PSAPI.DLL" nie może zostać odnaleziony "entry point" do procedury „GetProcessImageFileNameW”. Błąd ten jest bardzo uciążliwy, ponieważ uniemożliwia przeprowadzenie automatycznej instalacji produktu przy pomocy pliku odpowiedzi ".rsp". Bardzo ciekawą rzeczą jest również to, że pod Windows XP błąd ten występuje sporadycznie a pod Windows 7 zawsze. 

Oracle błąd PSAPI.DLL

Rys.1. Błąd "The procedure entry point GetProcessImageFileNameW could not be located in the dynamic link library PSAPI.DLL"

Biblioteka dynamiczna "PSAPI.DLL" jest częścia składową sytemów Windows ("%WinDir%\System32"). Podczas instalacji Oracle, nie jest jednak wykorzystywana, gdyż instalator Oracle korzysta z własnej, która jest kopiowana do tymczasowej lokalizacji. Po wystartowaniu "setup.exe" część instalacji jest wypakowywana pod  „%LOCALAPPDATA%\Temp\OraInstall2011-08-05_12-51-28PM”. Nazwa katalogu jest generowana automatycznie i zależna od dnia i godziny instalacji. Plik "PSAPI.DLL" wykorzystywany podczas instalacji jest w wersji "5.0.1849.1", co stanowi sporą różnicę z dostępnym lokalnie.

Stara wersja PSAPI.DLL

Rys.2. Wersja pliku "PSAPI.DLL" wykorzystywana przez instalator Oracle

Plik "PSAPI.DLL" wchodzący w skład Windows 7 ("%WinDir%\System32") – 6.1.7600.16385 (wersja zależna od zainstalowanych poprawek). 

Nowa wersja PSAPI.DLL

Rys.3. Wersja pliku "PSAPI.DLL" wchodząca w skład Windows 7

Jak można tu zauważyć, jest to problem z niekompatybilnoścą wersji biblioteki dynamicznej "PSAPI.DLL". Najprostszym rozwiązaniem byłoby nadpisanie jej podczas instalacji produktu. Jest to niestety niemożliwe, gdyż plik ten jest odrazu wypakowywany do tymczasowego katalogu i każdy plik już tam istniejący jest przez niego nadpisywany. Drugim problemem jest to, że zaraz po wypakowaniu plik ten jest w użyciu przez co niemożliwe jest jego nadpisanie.

Jedynym rozsądnym rozwiązaniem jest tu podminienie go w plikach źródłowych instalatora. Plik "PSAPI.DLL" znajduje się w postaci skompresowanej w pliku "RunningProcessQuery.jar" w katalogu ".\Client\stage\Queries\RunningProcessQuery\1.5.2\1" instalatora. Jako że plik ".jar" jest archiwem ".zip", możliwe jest podmienienie go w pliku źródłowym. Możemy to wykonać np. przy użyciu darmowego archiwizera "7zip". Wykonamy to w następujący sposób:

  • kopiujemy plik "RunningProcessQuery.jar" do dowolnej lokalizacji, gdzie otwieramy go przy pomocy "7zip"
  • następnie przechodzimy do katalogu ".\lib\win32\" i podmieniamy go nowszą wersją

Plik "PSAPI.DLL" po wymianie pod "7zip"

Rys.4. Podmieniona bilioteka dynamiczna "PSAPI.dll"

  • zamykamy "7zip" (automatycznie zapisuje zmiany) i kopiujemy tak zmodyfikowany plik ".jar" ponownie do katalogu ".\Client\stage\Queries\RunningProcessQuery\1.5.2\1"

  • uruchamiamy ponownie ręcznie instalację i sprawdzamy jej poprawność. Jeśli instalacja przebiegła poprawnie, możemy ją przetestować już w trybie automatycznym wraz z plikiem odpowiedzi .rsp. 

Be Sociable, Share!