wykonywanie poleceń cmd przez system()

0

witajcie, mam następujący problem: uruchomić program bcdedit za pomocą cmd. Będzie mi to potrzebne do programu którego chcę napisać.

Jak widać na screenie, w oknie po prawej, w cmd którego uruchomiłem ze startu wpisałem komende i działa jak należy.
Po lewej jest to również cmd, ale już odpalony przez kompilator. Nie działa.

http://i48.tinypic.com/if60pc.jpg

Inne programy odpalane, np regedit działają na obu. Jak to jest z tym poleceniem wewnetrznym lub zewnetrznym?
W programie zwyczajnie:

system("cmd");
i następnie wprowadzane ręcznie.

Help please, nie wiem o co biega. Mogę podać ścieżkę do folderu systemowego dokładną, wiem, ale tak nie chce.

0

CMD szuka danych programow lub ich odnosnikow w c:\window\system32\ lub uzywa zmiennych srodowiskowych takich jak PATH w celu odnalezienia np. .exe

user image

Ten odpalony z kompilatora zapewne nie dziala, bo nie korzysta z tego lub nie moze znalezc sciezek. Podaj mu dokladna lokalizacje .exe i wtedy odpal a powinno zadzialac lub dodaj do PATHS odpoiwiednie sciezki.

0

A jak to jest z exec itp. w windows? Jak się otwiera okienka jakieś to na rzecz konsoli w jakiś sposób? Bo jak wiadomo w linusie owszem tak jest.

0

Dzięki za odpowiedź, masz racje to właśnie tak działa (choć jak zobaczycie zaraz - nie do końca).
Problem w tym,że z tego programu którego chcę napisać będzie korzystało wiele osób, więc toporne byłoby każdemu dawać instrukcję jak najpierw dodawać ścieżkę do zmiennej środowiskowej.
Możnaby stworzyć dynamiczną ścieżkę aby po znalezieniu u każdego indywidualnie folderu system32 korzystał sobie właśnie z niego,ale właśnie i to nie będzie rozwiązaniem bo popatrzmy:

http://i48.tinypic.com/dzgzra.jpg

również teraz otrzymujemy podobne zastrzeżenie, ale

skopiowałem sam plik bcdedit.exe prosto na dysk D, uruchamiam:

http://i46.tinypic.com/2iuapg0.jpg

no działa (i to nawet w wersji angielskiej - lepiej) - ale nic poza tym. Jak przecież mam uruchomić ten program wraz z wariantami
np. bcdedit /set {bootmgr} custom:0x0000000054000001{pobrane od uzytkownika ID} czy też kilka innych podobnych?

Program musi być przenośny, a na razie nie działa nawet u mnie..

0

w rejestrze czego mam szukać? nie wydaje mi się, żebym miał czegokolwiek tam szukać :/

może wiecie w takim razie jak dodać za pomocą polecenia cmd ścieżkę do zmiennej środowiskowej? Kod ten wykonałby się zaraz na początku wykonania programu, żeby później reszta komend od bcdedit działała już tak jakby była prosto z poziomu uruchom->cmd ?

0

Czy jeśli swój program uruchomisz nie z poziomu VS, a po prostu z linii poleceń (mojprogram.exe), i z uprawnieniami administratora, to otrzymujesz te same komunikaty?

0

Niestety nadal ten sam problem:

Image and video hosting by TinyPic

przy uruchamianiu poleceń jako plik .bat również nie jest to rozpoznawane jako plik wsadowy.

0

W trybie release i ręcznie też nie działa. Zaraz ściągne jeszcze jakis inny kompilator może spróbuję, ale czy to coś da to wątpię. Gdyby tak jak wcześniej kolega mówił dodać tę ścieżkę (najlepiej na początku wykonywania sie programu) do tej zmiennej środowiskowej, to by śmigało ale nie mam pojęcia jakie polecenia za to odpowiadają.

0

Jest kilka sposobow na odpalenie danego programu przez konsole. Mozna umiescic plik .bat w system32 bo .exe lepiej nie, jesli korzysta z dllek jakichs to i tak sie nie odpali sam exe, mozna rowniez przez skrot, tylko trzeba dodac do ktorejs zmiennej srodowiskowej .LNK zeby rozpoznal skrot.

Aby dorzucic cos do zmiennej srodowiskowej na koniec piszemy cus takiego:
set path=C:\nasm;%path%

U mnie skrot w system32 odnosi sie do pliku .bat a z pliku .bat odpalam potem dalej rzeczy.

@set path=C:\nasm;%path%
@%comspec% /k "C:\newCMD\mycmd.bat"

comspec to zmienna srodowiskowa ktora wskazuje sciezke do cmd a dalsza czesc to przekazanie parametru wywolania programu.

Ps. Zapomnialem ze bcdedit to czesc systemu xD

Edit.

int main()
{
    system("%comspec% /k \"bcdedit\"");
    return 0;
}

ewentualnie

int main()
{
    system("C:/Windows/system32/bcdedit.exe");
    return 0;
}

Dziala i znajduje w mojej konsoli bez problemu.

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