PDA

Prikaži potpunu verziju : Pokretanje .exe fajla i manipulacija koriscenjem C#


NBAlex
1.5.2011, 15:10
Radim na jednom C# projektu, u kome mi se u jednom trenutku zahteva da pozovem eksternu aplikaciju PAK.EXE.
Ta eksterna aplikacija zahteva da u konzolu unesem naziv nekog .DAT fajla (PAK.exe i *.DAT fajlovi se nalaze u istom direktorijumu) i da 4 puta pritisnem ENTER (ova aplikacija PAK.exe radi odredjene operaciju u zavisnosti od DAT fajla i izbacuje 4 razna output fajla(zbog cega smo morali da pritisnemo ENTER)).

Moj C# kod koji sam koristio za pozivanje PAK.EXE aplikacije (pozivanje se dobro izvrsi):
public void RunPAKFile(string DATFileName)
{
ProcessStartInfo startInfo = new ProcessStartInfo();

int lastBackslashLocation = DATFileName.LastIndexOf("\\");
string temp = DATFileName.Remove(lastBackslashLocation);
string pakFileLocation = temp + @"\pak.exe";

startInfo.FileName = pakFileLocation;
//startInfo.Arguments = DATFileName.Substring(lastBackslashLocation + 1) + "\r\n";
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;

try
{
using (Process process = Process.Start(startInfo))
{
process.WaitForExit();
}
}
catch (Exception)
{

throw;
}
}Taj PAK.EXE je aplikacija tipa cmd i sliku mozete videti ispod. Sta treba da dodam u mom kodu da bih mogao da automatski unosim ove vrednosti?(Posto je rec o optimizaciji iste vrednosti treba ukucati N puta, pa otuda ne mogu rucno da unosim vrednosti). Ja sam probao sa startInfo.Arguments ...ali ne pije vodu

Ivan452
1.5.2011, 16:21
Da li imas mogucnost modifikacije te PAK.EXE aplikacije?
Jer, ako ne gresim, jedino kako to mozes da uneses jeste da ako modifikujes PAK.EXE aplikaciju da startuje sa ulaznim parametrima.
ono:main(string args[]){}

Ako ipak nemas mogucnost modifikacije PAK.EXE aplikacije mislim da bi jedina druga solucija bila simuliranje keypressova u windowsu. Sto i nije najelegantnije resenje.

voodoo_
1.5.2011, 17:11
Moguće je redirektovati ulaz u aplikaciju sa tastature na fajl. Dovoljno je u komandnoj liniji pozvati "program.exe < fajl.txt" i ulaz (red po red) će umesto sa tastature biti učitavan iz fajla.

http://technet.microsoft.com/en-us/library/bb490982.aspx

Tako da je rešenje tvoj problema da otvoriš Notepad, četiri puta udariš enter i snimiš fajl (npr linije.txt) u isti folder sa tim programom PAK.EXE.

Onda pozoveš komandni interpreter

cmd.exe /c PAK.EXE DATargumenti < linije.txt

startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/c pak.exe DATargumenti < linije.txt"

NBAlex
2.5.2011, 17:16
@Ivan452: Nemam mogucnost modifikacije PAK.EXE aplikacije

@voodoo: Probao sam sa redirektovanjem, i evo sta mi se desava

startInfo.FileName = "cmd.exe" otvara mi CommandPrompt koji pokazuje na sledeci direktorijum: "c:\FAKULTET\C# Projects\Femap\Femap\bin\Debug\"...(*) (Femap je naziv projekta)

Ako u direktorijum (*) ubacim "pak.exe" aplikaciju i "linije.txt" fajl koji sam napravio i pozovem StartInfo.Arguments = "/c pak.exe < linije.txt" onda se izvrsi sve kako je trebalo.

Medjutim, meni se "pak.exe" i "linije.txt" nalaze na sletecoj lokaciji: "c:\FAKULTET\FEMAP FILES\"....(+)
startInfo.Arguments = "/c " + pakFileLocation + " < " + linijeTXTlocation; onda se nista ne desava. Sta bi trebalo da ispravim u argumentima?

pakFileLocation = c:\FAKULTET\FEMAP FILES\pak.exe
linijeTXTLocation = c:\FAKULTET\FEMAP FILES\linije.txt

voodoo_
3.5.2011, 13:04
Ako putanje do fajlova sadrže razmake, moraš ih uokviriti u navodnike da bi se tretirali kao jedan argument, a ne više njih, npr

cmd.exe /c "C:\Program Files\bla bla\pak.exe" < "neka putanja\linije.txt"

tako da samo pre i posla pakFileLocationa i linijeTXTLocationa dodaj navodnike

startInfo.Arguments = "/c \"" + pakFileLocation + "\" < \"" + linijeTXTlocation + "\"";