5 Stimmen

Wie erstellt man einen Prozess in C++ unter Windows?

Kann mir jemand sagen, wie man einen Prozess in VC++ erstellt? Ich muss Folgendes ausführen

regasm.exe testdll /tlb:test.tlb /codebase

Befehl in diesem Prozess.

10voto

Kirill V. Lyadvinsky Punkte 92957

regasm.exe (Assembly Registration Tool) nimmt Änderungen an der Windows-Registrierung vor, wenn Sie also die regasm.exe als erhöhten Prozess zu verwenden, könnten Sie den folgenden Code verwenden:

#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" bedeutet, dass der Prozess mit erhöhten Rechten gestartet wird. Wenn Sie das nicht wollen, setzen Sie einfach shExecInfo.lpVerb auf NULL. Unter Vista oder Windows 7 sind jedoch Administratorrechte erforderlich, um einige Teile der Windows-Registrierung zu ändern.

4voto

ralphtheninja Punkte 116647

Sie müssen sich informieren über CreateProcess() in msdn. Auf dieser Seite gibt es Beispielcode.

4voto

paxdiablo Punkte 809679

Wenn Sie nur einen synchronen Befehl ausführen wollen (ausführen und warten), ist es am besten, wenn Sie einfach die system() Aufruf (siehe aquí ), um es auszuführen. Ja, ich weiß, es ist eine Linux-Seite, aber C ist doch ein Standard, oder? :-)

Für eine feinere Kontrolle darüber, was ausgeführt wird, wie es ausgeführt wird (sync/async) und viele weitere Optionen, CreateProcess() (siehe aquí ) und seine Brüder sind wahrscheinlich besser, obwohl Sie an die Windows-Plattform gebunden sind (was für Sie vielleicht nicht von unmittelbarer Bedeutung ist).

3voto

sharptooth Punkte 162790

Verwenden Sie CreateProcess(), um den Prozess zu starten, prüfen Sie den Rückgabewert, um sicherzustellen, dass der Prozess ordnungsgemäß gestartet wurde, und schließen Sie dann entweder die Handles für den Prozess und den Thread oder verwenden Sie WaitForSingleObject(), um zu warten, bis der Prozess beendet ist, und schließen Sie dann die Handles.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X