Są problemy zarówno w Windows XP jak i w nowszych systemach.
Wątpię, aby kogokolwiek jeszcze ten system obchodził.
Wielu programistów zapomina o PChar(ExtractFilePath(Application.ExeName)+
co np. w systemie Windows XP sama ścieżka nie wystraszy system nie odpali pliku za pomocą ShellExecute
PChar('JakaśAplikacja'),
Sama ścieżka nie wystarczy, bo istotna jest nazwa pliku wykonywalnego — bez niej system co najwyżej otworzy katalog w oknie eksploratora. Ale nawet jeśli brać pod uwagę samą nazwę pliku wykonywalnego (bez pełnej ścieżki), to nadal to co napisałeś jest nieprawdą.
System Windows (łącznie z XP) potrafi otworzyć dany program, jeśli ma do dyspozycji wyłącznie nazwę exeka. Najpierw sprawdzi katalog bieżący (czyli ten, w którym znajduje się plik wykonywalny aplikacji wołającej ShellExecute
lub ustawiony za pomocą SetCurrentDir). Jeśli nie znajdzie pliku, to sprawdzi m.in. katalog Windows\Win32\
i pewnie jeszcze kilka innych miejsc, zanim się podda i zwróci kod błędu.
I właśnie dzięki temu, że pełna ścieżka nie jest wymagana, w systemowym oknie Run
(skrót: Win+R
) można podać nazwę programu (nawet bez rozszerzenia .exe
), który chcemy otworzyć i ten go znajdzie, jeśli jest poprawnie zainstalowany. Sam w ten sposób zawsze otwieram Painta (nazwa to mspaint
), kalkulator (calc
), tablicę znaków (podając charmap
) czy Notepad++ (wpisując notepad++
) i się programy odpalają. Nie muszę tracić czasu na obsługę myszy czy na szukanie tych aplikacji na dysku (lub w jakichś menu).
Poza tym, jak się chce odpalić jakiś program, to się w jednym parametrze podaje jego ścieżkę, a w innym nazwę. Ja wiem, że złączenie ścieżki i nazwy a następnie przekazanie go jako jeden ciąg do ShellExecute
działa, ale z jakiegoś powodu ścieżka i nazwa zostały rozbite na dwa parametry.