uruchamianie innego execa i ukrywanie tego

0

Witam,

mama takie pytanko, otóz w soim programie chce uruchomić drugi np. System.Diagnostics.Process.Start

ale nie chce zeby to byl plik exe, tzn chodzi mi oto ze pisze program i tam bedzie np kilka plikow exe, i one sie komunikują, ale chce zeby uzytkownik mojego programu uruchamial tylko jeden exe i zeby nie mial wyboru miedyz kilkoma bo sie posypie, zeby uruchomil ten konkretny a na czytanie readme nie mam co liczyc, probowalem zmienic rozszerzenie exe na np. dat i uruchomic jak exe no ale wtedy system windwos nie wiem w czym i sie pyta, czy da sie jakos np zapisac zawartosc pliku exe jako plik dat, wczytac jego zawartosc do pamieci i uruchomic go np z ramu ? a jesli tak sie da w C# to prosze o jakaś podpowiedź.

0

Nie prosciej by bylo te inne programy, zrobic jako dll'ki i uruchamiac z kodu?

0

ale wlasnie musze użyć gotowego już execa nie mam jego kodów źródłowych.

0

Ja nie rozumiem, czemu masz kazac uzytkownikowi czytac readme, zamiast sam uruchamiac odpowiednie exe, w zaleznosci jaka opcje w programie ktos wlaczy (typu generuj wykres -> uruchamiasz program generowania wykresu).

0

Przyszlo mi do glowy takie oto rozwiazanie:
Jezeli mamy programik w pliku .exe, to mozemy go wkompilowac w kod i jezeli bedziemy chcieli go uruchomic to po prostu tworzymy go na dysku, odpalamy, ew. sprawdzamy co nam zwrocil i kasujemy plik z programem. Kod ponizej:

BinaryReader br = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("GlownyProgram.InnyProgram.exe"));
FileInfo file = new FileInfo("InnyProgram.exe");
FileStream fs = file.Create();
byte[] bytes = br.ReadBytes((int)br.BaseStream.Length);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
Process p = new Process();
p.StartInfo = new ProcessStartInfo("InnyProgram.exe");
p.Start();
p.WaitForExit();        // jesli chcemy czekac na to az uruchomiony programik sie zakonczy
Console.WriteLine("Aplikacja zwrocila: " + p.ExitCode.ToString());  // jezeli chcemy zobaczyc co zwraca
file.Delete();          // tak by skasowac to co wypakowalismy
Console.WriteLine("Zakonczyl sie wywolywany programik");
Console.Read();

GlownyProgram - default namespace mojej aplikacji
InnyProgram.exe - nazwa programu wrzuconego do sciezki glownej projektu

0

Inne rozwiazanie

Jezeli uruchamiany program jest pisany w .net'cie mozna to zrobic w prosty sposob bez tworzenia pliku na dysku. Po prostu ladujemy wkompilowany zestaw do aktualnej domeny aplikacji i uruchamiamy go ;)

BinaryReader br = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("GlownyProgram.InnyProgram.exe"));
byte[] bytes = br.ReadBytes((int)br.BaseStream.Length);
Assembly zestaw = AppDomain.CurrentDomain.Load(bytes);          AppDomain.CurrentDomain.ExecuteAssemblyByName(zestaw.GetName().Name);
0

Użytkownik ma nie mieć dostępu do innych exe?

To uruchom je jako visible=false, exe działa a dla użytkownika nie, bo go nie widzi ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0