windows - Er der nogen måde at starte processen i suspenderet tilstand?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil starte en proces i suspenderet tilstand. Er der nogen måde at gøre dette ved at bruge kun standardværktøjer, der kommer med Windows XP? Er der nogen lette tredjepartsværktøjer?


Problem jeg forsøger at løse:

Jeg har en applikation, som jeg vil debugere den ved hjælp af Visual Studio 2005. Jeg har fejlfinding opbygget med nødvendige * .pdb filer og jeg har alle kilder refereret fra disse * .pdb filer. Jeg ønsker ikke at oprette en tom løsning, som vil køre den ansøgning til mig, så jeg forsøger at vedhæfte denne proces efter den er lanceret fra et andet sted. En del af kode, jeg vil debugere, udføres i begyndelsen af procesopstart, så jeg vil køre den i suspenderet tilstand, vedhæfte en debugger og derefter genoptage den.

Bedste reference


Jeg er ikke helt sikker på hvad du forsøger at gøre fra dit spørgsmål, men måske bruger du ntsd debuggeren, der følger med XP, hjælper du med at gøre hvad du vil (som standard vil ntsd indlæse processen og stoppe ved den første instruktion) .





Fra den opdaterede information i dit spørgsmål foreslår jeg at downloade Debugging Tools for Windows-pakken fra Microsoft og debugging startup-stuff i WinDbg -Det er nogle ting, som Visual Studio er bedre til, men der er også nogle ting, som WinDbg er bedre på end Visual Studio (WinDBg er en meget kraftfuld debugger). [3]


Eller du kan bare indlæse programmet i Visual Studio debugger (uden en løsning) fra kommandolinjen:


devenv /debugexe yourprog.exe <arguments>

Andre referencer 1


Du kan nemt skrive en ansøgning, som vil gøre det for dig. Brug funktionen CreateProcess (), indstil CREATE\_SUSPENDED flag i parametrene dwCreationFlags.


For din specifikke opgave kan applikationen gøre følgende: Call CreateProcess () for at starte programmet og tjekke fejlkoden, og ring derefter MessageBox () for at fortælle dig at vedhæfte debuggeren, og derefter efter at du har trykket på en knap i meddelelsesboksen (MessageBox () returnerer) Ring ResumeThread () for at genoptage applikationen.

Andre referencer 2


Jeg har spurgt mig selv det samme spørgsmål i et stykke tid nu, og lige nu fandt jeg dette ret hyggelige lille værktøj, der vil gøre præcis hvad du (og jeg) vil have. Du kan bare få det binære eller kilden også.


http://www.codeproject.com/Articles/230005/Launch-a-process-suspended[4]

Andre referencer 3


Med hensyn til lette 3rd party værktøjer:


SysInternals Process Explorer:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx[5]


… giver dig mulighed for at suspendere og genoptage processer. Det kan ikke 'starte' dem suspenderet, men kan være nyttigt til dit formål alligevel. Det er en gratis download.