ďťż

Ładny brzuch

Witam
Mam problem, który mam nadzieję, będzie dla kogoś drobnostką.
Posiadam 2 podprogramy. Pierwsze run.exe i drugi program.exe.
run.exe jest odpowiedzialny za uruchomienie program.exe. Chcę uchronić się przed sytuacją kiedy ktoś uruchomi program.exe bez wcześniejszego udziału run.exe.
W tym celu, run.exe startuje program z parametrem "program.exe -start".
Jak teraz w program.exe zrobić sprawdzenie, czy program został wywołany w Windows z parametrem czy bez? Jeśli jest parametr "-start" to niech się uruchomi. W przeciwnym wypadku niech się nie uruchamia.

Może jest jakas opcja w samym kompilatorze?

Z góry dzięki za wszelkie wskazówki!




Jak teraz w program.exe zrobić sprawdzenie, czy program został wywołany w Windows z parametrem czy bez? Jeśli jest parametr "-start" to niech się uruchomi. W przeciwnym wypadku niech się nie uruchamia.
Samo sprawdzanie parametrów można wykonać w funkcji main. Wystarczy sprawdzić czy tablica arg[] jest pusta czy nie i czy jest w niej parametr start.

Pytanie tylko, czy program program.exe wymaga czegoś co robi run.exe czy tez może run.exe jest tylko programem uruchomieniowym. Jeżeli program.exe wymaga czegoś co wcześniej robi run.exe, to samo sprawdzenie w program.exe parametru nie wystarczy bo każdy program można uruchomic np. z okienka uruchom wpisując program.exe - start. I co sie wtedy będzie działo?


Samo sprawdzanie parametrów można wykonać w funkcji main. Wystarczy sprawdzić czy tablica arg[] jest pusta czy nie i czy jest w niej parametr start.

Pytanie tylko, czy program program.exe wymaga czegoś co robi run.exe czy tez może run.exe jest tylko programem uruchomieniowym. Jeżeli program.exe wymaga czegoś co wcześniej robi run.exe, to samo sprawdzenie w program.exe parametru nie wystarczy bo każdy program można uruchomic np. z okienka uruchom wpisując program.exe - start. I co sie wtedy będzie działo?


Witam! Dzięki bardzo za zainteresowanie. Program.exe nie wymaga niczego od run.exe. Program.exe ma tylko sprawdzać czy został wywołany z parametrem.
Dobrze zauważyłeś, że można "oszukać" i wpisać to z poziomu menu "uruchom" ale nie muszę się tym przejmować.

A czy mogę Cię prosić o kod ze sprawdzeniem arg[] w main. Znalazłem podobne rzeczy ale w c++ pod konsole i nie bardzo mi to chce ruszyć. Będę wdzięczny jeśli potrafisz!

Pokaż jaką masz funkcję main, tzn samą jej deklarację, co zwraca i jakie przyjmuje parametry.
Użytkownik imcpan edytował ten post 24 czerwiec 2009, 21:13



Pokaż jaką masz funkcję main, tzn samą jej deklarację, co zwraca i jakie przyjmuje parametry.
Szukałem we wszystkich plikach i nie mam standardowej funkcji main. Jedyne co znalazłem wklejam poniżej. Czy main musi być? Czy jeśli nie ma to po prostu dodać? A może to co wklejam jest tym o co pytasz?

#include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("program.cpp", Form2); USEFORM("splash.cpp", Form3); USEFORM("about.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); SetApplicationMainFormOnTaskBar(Application, true); Application->ShowMainForm=false; Application->Title = "Program"; Application->CreateForm(__classid(TForm2), &Form2); Application->CreateForm(__classid(TForm3), &Form3); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; }

Masz. WinMain to standardowa funkcja. Innej nie potrzebujesz.
Zmodyfikuj sobie funkcję WinMain tak jak poniżej. Parametr lpCmdLine zawiera wszystkie parametry linii poleceń.WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
Użytkownik imcpan edytował ten post 26 czerwiec 2009, 10:26
[quote name='imcpan' post='854619' date='26.06.2009 11:23']Masz. WinMain to standardowa funkcja. Innej nie potrzebujesz.
Zmodyfikuj sobie funkcję WinMain tak jak poniżej. Parametr lpCmdLine zawiera wszystkie parametry linii poleceń. WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { if (lpCmdLine!="start") return 0; //exit else { //kod odpowiedzialny za uruchomienie programu try { Application->Initialize(); SetApplicationMainFormOnTaskBar(Application, true); Application->ShowMainForm=false; Application->Title = "Program"; Application->CreateForm(__classid(TForm2), &Form2); Application->CreateForm(__classid(TForm3), &Form3); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } }

if (lpCmdLine!="start")
Takie rzeczy sprawdza się debugiem. Najprawdopodobniej chodzi wyłącznie o ten minusik ("-") przed parametrem start, albowiem zmienna lpCmdLine zawiera kompletny łańcuch tekstowy znajdujący się w wywołaniu programu po jego nazwie, a zatem zawiera też minusa. Czyli powinno być:if (lpCmdLine!="-start")
Bezpieczniej jednak byłoby sprawdzać nie to czy lpCmdLine = "-start" ale czy lpCmdLine zawiera ciąg "start".
Użytkownik imcpan edytował ten post 03 lipiec 2009, 12:41

Bezpieczniej jednak byłoby sprawdzać nie to czy lpCmdLine = "-start" ale czy lpCmdLine zawiera ciąg "start".

Dobry trop! Porównałem wartości przez strcmp(lpCmdLine, "-start") i teraz zadziałało... Bardzo Ci dziękuję za pomoc!
Pozdrawiam
Użytkownik mlodyno edytował ten post 06 lipiec 2009, 08:07
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •