Czy ktoś może mi powiedzieć, jak utworzyć proces w VC++? W tym procesie muszę wykonać komendęJak utworzyć proces w C++ w systemie Windows?
regasm.exe testdll /tlb:test.tlb /codebase
.
Czy ktoś może mi powiedzieć, jak utworzyć proces w VC++? W tym procesie muszę wykonać komendęJak utworzyć proces w C++ w systemie Windows?
regasm.exe testdll /tlb:test.tlb /codebase
.
Musisz przeczytać na CreateProcess() w msdn. Na tej stronie jest przykładowy kod.
Jeśli chcesz tylko wykonać polecenie synchroniczne (uruchom i czekaj), najlepiej jest po prostu użyć wywołania system()
(patrz here), aby go uruchomić. Tak, wiem, że to strona Linux, ale C to standard, nie? :-)
Aby uzyskać dokładniejszą kontrolę nad tym, co się uruchamia, jak działa (synchronizacja/asynchronizacja) i wiele innych opcji, CreateProcess()
(patrz here), a jego bracia, są prawdopodobnie lepsi, chociaż będziesz związane z platformą Windows (która może nie dotyczyć Ciebie bezpośrednio).
Użyj funkcji CreateProcess() do odrodzenia procesu, sprawdź wartość zwracaną, aby upewnić się, że wszystko zaczęło się dobrze, a następnie zamknij uchwyt do procesu i wątku lub użyj funkcji WaitForSingleObject(), aby poczekać, aż zakończy się, a następnie zamknij uchwyty.
regasm.exe
(Registration Tool Assembly) dokonuje zmian w rejestrze systemu Windows, więc jeśli chcesz rozpocząć regasm.exe
jak podwyższone proces można użyć następującego kodu:
#include "stdafx.h"
#include "windows.h"
#include "shellapi.h"
int _tmain(int argc, _TCHAR* argv[])
{
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L"runas";
shExecInfo.lpFile = L"regasm.exe";
shExecInfo.lpParameters = L"testdll /tlb:test.tlb /codebase";
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_NORMAL;
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
return 0;
}
shExecInfo.lpVerb = L"runas"
oznacza, że proces zostanie uruchomiony z podwyższonymi przywileje. Jeśli nie chcesz, po prostu ustaw shExecInfo.lpVerb
na NULL. Ale pod Vistą lub Windows 7 wymagane jest prawo administratora do zmiany niektórych części rejestru Windows.
To działa dobrze raczej powyżej. Ale tymczasem pyta, pod którym użytkownikiem musi działać. Możesz wyjaśnić ten program SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute
Zmodyfikowałem l "run as" na wartość null, a następnie działa bez pytania. ok czym jest to oznaczenie L i jak powstał proces? – Cute
L jest dla ciągu znaków Unicode. –
Wcale nie dupe. Inne pytanie zakłada, że CreateProcess to jedyny sposób na zrobienie tego. Ten jest bardziej otwarty. Dla przypomnienia, sugerowane dupe było http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable - Wyjąłem to pytania, ponieważ uważam, że nie jest to dobra forma do edytowania treści. Uważam, że należy to uwzględnić w komentarzach. Jeśli zostanie zamknięty jako duplikat, SO sam doda to do pytania. – paxdiablo