Spouštění externího exe souboru – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spouštění externího exe souboru – Delphi – Fórum – Programujte.comSpouštění externího exe souboru – Delphi – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
TB0
Newbie
22. 3. 2015   #1
-
0
-

Ahoj všichni,

dělám takový prográmek, který by měl spouštět jinou aplikaci. Problém je v tom, že ta konkrétní aplikace spustit nejde, všechny ostatní, které jsem zkoušel fungovali, jenom tato jedna ne.

Mohlo by to mít spojitost s tím, že aplikace (ta která mi nejde spustit) musí byt spuštěna ve své vlastní složce, která obsahuje jiné soubory, které spouští, jakmile ji přesunu jinam tak nefunguje. 

Celé se to chová tak, že se provede příkaz pro spuštění aplikace, a pak už nic.

V cestě k souboru chyba určitě není, spíš jde o způsob jakým ji spustit.

Díky za rady :)

Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:31d7:...–
Sniper
~ Anonymní uživatel
215 příspěvků
22. 3. 2015   #2
-
0
-

No pokud ta aplikace vyžaduje další soubory, tak to asi obejít nepůjde a budeš ji muset spouštět na správném místě. Mimochodem, jak ten druhý program spouštíš (je spousta způsobů)?

Nahlásit jako SPAM
IP: 90.179.201.–
TB0
Newbie
22. 3. 2015   #3
-
0
-

Nepřesně jsem se vyjádřil. Já ji spouštím ve složce ve které má být. Prostě, když na ni normálně kliknu, tak to funguje a když ji v té samé složce spustím přes můj program, tak nefunguje. Chová se jako bych ji spouštěl v jiné složce.

Zkoušel jsem několik způsobů například:

ShellExecute(Handle, 'open', PChar('C:\Aplikace.exe'), nil, nil, SW_SHOWNORMAL); // nebo
WinExec(PChar('C:\Aplikace.exe'), SW_SHOWNORMAL);

dokonce jsem zkoušel i postup popsaný na této stránce (3. část):

http://www.zive.cz/clanky/tipy-a-triky-v-delphi-dil-32/sc-3-a-105524/default.aspx

Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:a83a:...–
q
~ Anonymní uživatel
219 příspěvků
23. 3. 2015   #4
-
+1
-
Zajímavé
TB +

Předposlední parametr ShellExecute určuje pracovní složku spouštěné aplikace.

Nahlásit jako SPAM
IP: 213.211.51.–
23. 3. 2015   #5
-
0
-

Klikneš přímo na exe nebo na zástupce? Pokud na zástupce, může být aplikace spouštěna s parametrem a bez parametru nemusí fungovat správně.

hu

Edit: Pokud název exe souboru obsahuje mezeru, je třeba ho umístit do ", např. "nazev aplikace.exe", jinak je mezera považována za oddělovač mezi názvem exe a parametrem nebo mezi parametry.

Nahlásit jako SPAM
IP: 2001:67c:1222:800:6c9f:8c...–
TB0
Newbie
23. 3. 2015   #6
-
0
-

#4 q

Nejsem si jistý, jestli dobře chápu. Jak by teda vypadal příkaz, kdybych chtěl spustit například aplikaci umístěnou v C:\Program\Launcher.exe ?

Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:552:8...–
TB0
Newbie
23. 3. 2015   #7
-
0
-

#5 hlucheucho
Ne, klikám přímo na exe soubor. Ani mezeru v názvu neobsahuje.

Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:552:8...–
Sniper
~ Anonymní uživatel
215 příspěvků
24. 3. 2015   #8
-
+1
-
Zajímavé
TB +

   

ShellExecute(Handle,'open',PChar('C:\Program\Launcher.exe'),nil,PChar('C:\Program'),SW_SHOWNORMAL);

Jak již bylo řečeno, předposlední parametr je adresář ze kterýho se to spustí (working directory), viz. zde https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx

WinExec bych nepoužíval, neb MS k tomu píše "This function is provided only for compatibility with 16-bit Windows.".

Nahlásit jako SPAM
IP: 90.179.201.–
24. 3. 2015   #9
-
0
-

Střílím od pasu: Co uživatelské účty a jejich oprávnění? Firewall, antivir... 

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:db7:a89...–
TB0
Newbie
24. 3. 2015   #10
-
0
-

Děkuju všem za rady, to je přesně co jsem hledal.

ShellExecute(Handle,'open',PChar('C:\Program\Launcher.exe'),nil,PChar('C:\Program'),SW_SHOWNORMAL);
Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:343b:...–
TB0
Newbie
24. 3. 2015   #11
-
0
-

Ještě poslední otázka, ja byste naše dosud získané poznatky aplikovali v této proceduře, případně navrhli alternativu.

prostě aby můj program čekal na ukončení toho, který spustil. 

procedure ShellExecute_AndWait(FileName : String);
var 
exInfo : TShellExecuteInfo; 
Ph    : DWORD; 
begin 
  FillChar( exInfo, Sizeof(exInfo), 0 ); 
  with exInfo do 
  begin 
    cbSize:= Sizeof( exInfo );
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; 
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open'; 
    lpFile:= PChar(FileName); 
    nShow := SW_SHOWNORMAL;
  end; 
  if ShellExecuteEx(@exInfo) then 
  begin 
    Ph := exInfo.HProcess; 
  end 
  else 
  begin 
    ShowMessage(SysErrorMessage(GetLastError)); 
    exit; 
  end; 
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
  Application.ProcessMessages; 
  CloseHandle(Ph);
end;
Nahlásit jako SPAM
IP: 2a00:1028:8d1f:15d2:343b:...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý