Kezdőoldal » Számítástechnika » Programozás » Pascal - Exec eljárási problém...

Pascal - Exec eljárási probléma/kérdés?!

Figyelt kérdés

Adott egy program, melyben használok akár egy vagy több exec eljárást, hogy külső programokat futtathassak.

A kérdésem az lenne, hogyan lehetne megoldani, hogy ne fix helyre mutasson az exec eljárás tartalma, hanem ahova az adott programomat telepítem/helyezem.


Példa:


Megírtam egy programot amely c:\test mappában található. A külső programok is (amelyet az imént megírt program használni fog) szint úgy itt vannak. Hogyan lehetne megoldani, hogy akkor is futtassa az külső programokat a főprogram, hogy, ha áthelyezem mondjuk az egész MAPPÁT a D:\test2\ mappába, vagy bárhova? (Természetesen mindenhova az egész mappát)


Eddig így használtam:

exec('C:\Windows\System32\cmd.exe', '/C "C:\test\valami.exe"');


De látható, hogy ennél a verziónál a valami.exe fájlnak fix hely van meghatározva mégpedig a C: meghajtón.

Nem tudom mennyire triviális a válasz a kérdésre, de én nem jöttem rá a probléma megoldására.


A válaszokat előre is nagyon köszönöm!



2014. dec. 18. 18:24
 1/7 Reiber Péter ***** válasza:
A saját útvonaladat (ha minden amit hívni szeretnél ugyanott, ugyanabban a könyvtárban lesz, mint a saját alkalmazásod) a paramstr(0)-ból szedheted ki.
2014. dec. 18. 19:00
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Egy kisebb példa programot/programrészt tudsz írni, ha nem nagy kérés?


Köszönöm a segítséged!

2014. dec. 18. 19:10
 3/7 SimkoL ***** válasza:

program Project1;


{$mode objfpc}{$H+}


uses sysutils;

begin

WriteLn(ExtractFilePath(ParamStr(0)));

ReadLn;

end.

2014. dec. 18. 19:22
Hasznos számodra ez a válasz?
 4/7 coopper ***** válasza:

Szia.


ProgUtv:=StringMasolasaAzUtolsoJelig(Paramstr(0),'\');


A "StringMasolasaAzUtolsoJelig" függvényt neked kell megirni a következőképpen :


A paramstr (0) egy string ami tartalmazza a programod teljes elérési útvonalát és a programod nevét is (kiterjesztéssel együtt), tehát : C:\test\valami.exe a paramstr (0) tartalma ha a C:\Test mappából inditoták a Valami.exe nevű programot) .


Inditasz egy ciklust a string végétől az eleje felé (a while jobban megfelel most az igényeknek mint a for ciklus) és megnézed a string aktuális karaktere olyan-e mint a keresett karakter ('\' blackslash) ha olyan akkor eltárolod a string aktuális pozicióját és kilépsz a ciklusból.


Most lemásolod az átadot stringnek - paramstr (0) -

az első karakterétől a megjegyzett pozicióig a karaktereket egy másik stringbe (copy parancs) és a függvény ezzel az új stringgel tér vissza.


Vagy úgy készited el a másolást, hogy az utolsó karakter még benne van a végső stringben, vagy úgy, hogy az már nincs benne ez felhasználástől függ.


Megkapod a programod elérési utvonalát, bárhonnan is inditották.


Sok sikert.

üdv.

2014. dec. 18. 20:00
Hasznos számodra ez a válasz?
 5/7 SimkoL ***** válasza:

Ha már visszacsorgunk a Turbo Pascal-hoz neki is volt erre beépített függvénye az FSplit:


program valami;


uses Dos;


function eleresi_ut : string;

var P : PathStr;

D: DirStr;

N: NameStr;

E: ExtStr;

begin

FSplit(ParamStr(0), D, N, E);

eleresi_ut := D;

end;


begin

WriteLn(eleresi_ut);

end.

2014. dec. 18. 21:01
Hasznos számodra ez a válasz?
 6/7 SimkoL ***** válasza:
Bocs, a P benn maradt, az lenne a ParamStr(0).
2014. dec. 18. 21:02
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Nagyon szépen köszönöm a válaszokat, rendkívül hálás vagyok!

A problémát sikeresen megtudtam a segítségekkel oldani így lassan betudom fejezni ezt a pascal projektet.


További szép napot, minden jót a továbbiakban és még egyszer köszönöm!

2014. dec. 19. 00:44

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!