Parametry przekazywane przy wywołaniu aplikacji z konsoli wiersza poleceń mają w pewien sposób wpłynąć na stan startowy aplikacji.
Najpopularniejszym przykładem jest uruchomienie aplikacji ze wskazanym plikiem, np.: edytor tekstowy.
Ten przykład uruchomi Notatnik z plikiem win.ini (może być potrzeba dopasowania ścieżki do systemu).
Notatnik przegląda swoje parametry i szuka wskazanych.
Twoja aplikacja może zrobić to samo!
Parametry wiersza poleceń są przekazywane do aplikacji WPF przez event Startup, który jest subskrybowany w App.xaml.
W przykładzie zrobimy to samo, a potem użyjemy przekazanych wartości jako argumenty metod.
Wszystko co tutaj robimy to subskrybujemy event Startup, zastępując atrybut StartupUri.
StartupEventArgs jest tym czego potrzebujemy.
Jest przekazywane do eventu Application Startup o nazwie e.
Parametr posiada atrybut Args, który jest tablicą tekstów.
Parametry wiersza poleceń oddzielone są spacjami, chyba że spacje są w cudzysłowie.
| Element | Znaczenie |
|---|---|
| Startup | Event wywoływany przy uruchomieniu aplikacji |
| StartupEventArgs | Obiekt zawierający argumenty startowe |
| Args | Tablica tekstów z parametrami wiersza poleceń |
Jeżeli uruchomisz powyższy przykład nic się nie stanie, ponieważ nie został przekazany żaden parametr do wiersza poleceń.
Na szczęście Visual Studio ułatwia nam testowanie takiej sytuacji w Twojej aplikacji.
Z menu Projekt wybierz Opcje [Nazwa projektu] i Debug, gdzie możesz zdefiniować parametry wiersza poleceń.
Powinno to wyglądać tak:
Spróbuj uruchomić aplikację i zobaczysz, że odpowiedziała na Twój parametr.
Oczywiście wiadomość nie jest bardzo przydatna.

W tym przykładzie sprawdziliśmy czy jest dokładnie jeden argument i jeżeli tak to użyliśmy go jako nazwy pliku.
W prawdziwym świecie możesz mieć wiele argumentów, a nawet używać ich do ustawień, np.: przełączania dodatków lub trybów.
Gdy program Access jest uruchamiany z poziomu wiersza polecenia, dowolna część wiersza polecenia, która następuje po opcji /cmd , jest przekazywana do programu jako argument wiersza polecenia.
Jeżeli funkcja Command jest używana w dowolnym miejscu innym niż w kodzie języka Visual Basic for Applications (VBA) w module, po funkcji należy umieścić puste nawiasy okrągłe.
Poniższe przykłady przedstawiają sposób użycia tej funkcji w module języka Visual Basic for Applications (VBA).
Aby przetestować ten przykład, kliknij przycisk Start systemu Windows, a następnie kliknij pozycję Uruchom.
W jednym wierszu w polu Uruchom wpisz następujący kod.
Po wywołaniu tej procedury program Access otworzy formularz Zamówienia.
Witam wszystkich serdecznie,Panowie i Panie, czas ucieka zabierzmy się do pracy!
Piszę program który muszę uruchamiać z cmd z jednym argumentem oraz tekstem z pliku program.exe 2 text.txt
I program polega na tym, ze aby uruchomić ten program muszę go skompilować, zamknąć, otworzyć cmd i tam wpisać powyższą komendę.
Nie jest to zbyt wygodne, a co gorsza nie mogę używać debuggera.
Piszę w Code block i próbowałem ustawić : Project->Set programs arguments2 < text.txt
Lecz wtedy nie dostaje tekstu na stdin, tylko jako kolejny argument, co jest bardzo smutne :(.
Czy jest jakaś możliwość uruchomienia tego z IDE wstawiając do stdin na samym początku mój tekst?
Próbowałem nawet wyczarować coś stdin < "asdas";na samym początku programu, no ale chyba przesadziłem z tą magią.
Dane pobieram za wykorzystaniem funkcji getchar() : for(...( c = getchar() ) != EOF...)
I taki jeszcze pytaniowy bonus.
Jeżeli chciałym zrobić apkę która właśnie działaąłby z cmd czyli właśnie w ten sposób program.exe 2 text.txt ale również żeby działała jeżeli odpalę bezpośrednio .exe
To jak to zrobić żeby użytkownik mógł wpisać swój tekst i program poszedł dalej, ponieważ tak to funkcja getchar() zatrzymuje mnie na zawsze jako iż user wpisuje do buffora, wciska enter, dociera to do stdin, getchar() sobie pobiera ładnie fajnie, ale pobierze wszystko i na końcu nie zobaczy EOF, a więc będzie czekał dalej na dane.
nie wiem czy do końca Cię zrozumiałem, ale 1.funkcja system wykonuje podane w parametrze polecenia, tak, jakbyś je wykonał wpisując je samemu z Command Line.
system("nazwa.rozszerzenie parmametr1 ...");
np.: system("calc.exe") ; //<---- kalkulator
system("jakiś.exe a b c"); //<---- wykonanie exe z argumentami.
Bóg zapłać Drogi Człowieku.
Funcja freopen(); powinna pomóc przy pracy.
Na początku kodu wstawiam freopen( "bin\\debug\\dupa.txt", "r", stdin );
dzięki czemu mam tekst z pliku na stdin, a jak będę miał ukończonyy program to to usunę i będzie działać z cmd tak jak wymaga tego projekt.
Jeszcze zostaje druga kwestia.
Jeżeli użytkownik np wpisze w cmd program.exe 2 < dupa.txt
To wszystko będzie śmigać i program zwróci potrzebny wynik.
Natomiast użytkownik powinien mieć również możliwość uruchomienia programu w taki sposób program.exe 2
I w tym momencie wprowadzać dane nie z pliku tylko z keyboarda, tylko że używam warunku:
for( i= 0 ; ( c = getchar() ) != EOF ; i++ ) {..}
Czyli getchar() czeka na EOF, którego z keyboarda nie dostanę.
Czyli chciałbym aby po wciśnięciu enter przez użytkownika wszystkie characters zostały pobrane przez getchar i pętla została opuszczona.
Since there are two types a string and an integer, we expect it to read in 2 values
Now, if we get 2 values, the loop continues.
If we don't get 2 values, either because we are at the end of the file or some other problem occurred (e.g., it sees a letter when it is trying to read in a number), then the loop will end (>> will return a 0 in this case).
To jest C, także spróbowałem z użyciem getline, ale z tym również nie działa.
Przez Javę - rozwiązania znalezione na necie takie jak evaluate.exe + jakiś skrypt VBRUNAS.VBS - to wszystko nadal wywołuje wpisanie hasła dla admina w cmd z polecenia runAs.
Z systemu: wszelkie harmonogramy zadań itp.
W harmonogramie dodajemy sobie zadanie.
W zadaniu tym uruchamiamy nasz .jar z poleceniami wiersza poleceń jako administrator.
Tworzymy nową apkę - która uruchamia nam zadanie w Harmonogramie Zadań.
Dodatkowo przypisujemy możliwość uruchamiania zadania dla wszystkich użytkowników(omija to problem z widocznością użytkownika).
Dodam, że rozwiązanie to zadziała tylko i wyłączenie kiedy ustawienia z domeny nie są cały czas aktualizowane (czyli urządzenie łączy się z domeną np.
tags: #uruchamianie #aplikacji #z #argumentem #w #cmd
About the author