• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ShellExecute(),CreateProcess(), system("") Uruchomienie Programu i zamknięcie poprzedniego Visual Studio

Object Storage Arubacloud
0 głosów
225 wizyt
pytanie zadane 27 czerwca 2020 w C i C++ przez Czarus Obywatel (1,310 p.)
Dobry Wieczór! Wiem, że jest dużo rzeczy o tym w internecie ale po dwóch dniach kopania się w tym, nie potrafię dojść do jakiegoś sensownego rozwiązania.

Mianowicie potrzebuję za pomocą programu x otworzyć program y i żeby po wykonaniu akcji program x się zamkną.Próbowałem wszystkiego co znalazłem ShellExecute(); ani CreateProcess(): nie zadziałały ani razu, błąd za błędem:

Błąd (aktywny)    E0167    argument typu "const char *" jest niezgodny z parametrem typu "LPCWSTR"

lub

Błąd    LNK2028    nierozpoznany token (0A000540) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) przywoływany w funkcji "private: void __clrcall SortMenagerlogin::login::decode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?decode@login@SortMenagerlogin@@$$FA$AAMXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

Tragedia... Zadziałało tylko kochane system(""); ale otwiera się konsola i trzeba zamknąć ją ręcznie, czyli też nie to co chcę zrobić. Fragment kodu bo tylko to mi się wydaje za takie ważniejsze:

https://drive.google.com/file/d/13cs7sZqAe8TlqGPufKjhSjgVRPm3tqQv/view?usp=sharing

Macie jakieś pomysły?

1 odpowiedź

0 głosów
odpowiedź 28 czerwca 2020 przez j23 Mędrzec (194,920 p.)
wybrane 28 czerwca 2020 przez Czarus
 
Najlepsza

  E0167    argument typu "const char *" jest niezgodny z parametrem typu "LPCWSTR"

Podajesz stringa w kodowaniu ANSI, a funkcja oczekuje go w znakach szerokich wchar_t, czyli w kodowaniu UTF-16. Użyj funkcji w wersji ANSI, czyli CreateProcessA.

LNK2028    nierozpoznany token (0A000540) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)"

Dodaj bibliotekę shell32.lib do projektu.

komentarz 28 czerwca 2020 przez Czarus Obywatel (1,310 p.)

trochę pomogło, jest mniej, błędów, ale dalej nie da się uruchomić po tym jak zmieniłem na CreateProcessA i wziąłem "exe" w cudzysłowie ale wypisuje że za mało argumentów.

Biblioteki shell32.lib nie mogę dodać :/ więc odpada

CreateProcessA("data\\1.exe", "exe", NULL, NULL, TRUE, 0, NULL, NULL);

https://drive.google.com/file/d/1RP2NXWYhB9WBAnlBGUJ85EJQ_l-WcED_/view?usp=sharing

komentarz 28 czerwca 2020 przez j23 Mędrzec (194,920 p.)

(...) ale wypisuje że za mało argumentów.

Zajrzyj może do dokumentacji -> link

Biblioteki shell32.lib nie mogę dodać

Jak to nie możesz? Przecież to standardowa biblioteka systemowa.

komentarz 28 czerwca 2020 przez Czarus Obywatel (1,310 p.)

Działa! Wkleiłem coś takiego:

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);

CreateProcessA("data\\1.exe", "exe", NULL, NULL, TRUE, 0, NULL, NULL,&si,&pi);  //  :)

https://drive.google.com/file/d/1hzk5MmGPD_M8cvIan02_c3kqYRZdY44i/view?usp=sharing

Co prawda nie wiem dlaczego działa ani jak ale działa :) 

A z tą biblioteką to porostu nie mogę nie wiem czemu

https://drive.google.com/file/d/1ZjYFAI0Qj9limjjyQwNJKKTHrIvwWGdl/view?usp=sharing

Dzięki wielkie za pomoc!

komentarz 28 czerwca 2020 przez j23 Mędrzec (194,920 p.)

porostu nie mogę

Nie możesz, bo tak się nie dodaje bibliotek do projektu. W ten sposób załącza się nagłówki.

Biblioteki dodajesz w opcjach projektu. Jeśli dobrze pamiętam: Linker ► Input ► Additional dependencies.

W VC++ biblioteki można też dodawać z poziomu kodu dyrektywą #pragma comment(lib, "<nazwa biblioteki>")

 

Podobne pytania

0 głosów
1 odpowiedź 308 wizyt
0 głosów
1 odpowiedź 1,660 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez voaeron Początkujący (370 p.)
0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 2 lipca 2020 w C i C++ przez Czarus Obywatel (1,310 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...