Announcement

Collapse
No announcement yet.

Fehler nach OpenProcess

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler nach OpenProcess

    Hallo Zusammen,
    ich habe Funktion, die ich zum beenden verschiedener Applikationen verwende. Die Funktion erledigt auch das was ich erwarte und auch mehrfach hintereinander. Sie beendet eine extern Applikation.

    Durch Zufall habe ich festgestellt, dass nach dem Aufruf OpenProcess von GetLastError der "Fehler Code: 5 Zugriff verweigert" erkannt wird.

    Was hat das zu Sagen? Kann es sein, dass der Fehler von der beendeten externen Applikation kommt?

    Danke
    Dieter


    Code:
    void __fastcall TOpenCloseApp::CloseExterneApp(TObject *Sender)
    {
    	HANDLE hProc;
    	int i;
    
    	for(i = 0; i < AnzahlApp; i++)
    	{
    		if(ApplikationInfo[i].bRunning)
    		{
    			//Prozess öffnen
    			hProc=OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE,
    					false,
    					ApplikationInfo[i].ProzessInfo.dwProcessId);
    			if(hProc==NULL)
    				FehlerBehandlung->TranslateErrorCode(
    								1,
    								"[TStartAppForm::CloseButtonClick] OpenProcess",
    								"");
    
    			//Prozess beenden
    			if(TerminateProcess(hProc,0))
    			{
    				// Warte 5 Sek. ob die Application beendet wurde.
    				if(WaitForSingleObject(hProc,5000) == WAIT_TIMEOUT)
    					FehlerBehandlung->TranslateErrorCode(
    								1,
    								"[TStartAppForm::CloseButtonClick] WaitForSingleObject",
    								"");
    				else
    				{
    					ApplikationInfo[i].bRunning = false;
    					if (OnAppTerminated)
    						OnAppTerminated(this, &ApplikationInfo[i].iKennung);
    				}
    			}
    			else
    				FehlerBehandlung->TranslateErrorCode(
    							1,
    							"[TStartAppForm::CloseButtonClick] CloseExterneApp",
    							"");
    		}
    	}	// Ende: for(i = 0; i < AnzahlApp; i++)
    	// Es ist keine Applikation aktiv.
    	IndexOfActiveApp = 0;
    }
    Zuletzt editiert von Dieter Hinterthür; 07.09.2011, 13:37.
    Mache Software wird nie fertig. Man muss sie für fertig erklären.

  • #2
    Was hat das zu Sagen?
    5 = ERROR_ACCESS_DENIED

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Kann es sein, dass der Fehler von der beendeten externen Applikation kommt?
    Nein, diese wird dir keinen Errorcode senden können. Er kommt aus deiner Applikation
    Christian

    Comment


    • #3
      Hallo,
      ja hatte ich hatte geschrieben
      .....dass nach dem Aufruf OpenProcess von GetLastError der "Fehler Code: 5 Zugriff verweigert" erkannt wird.
      Anders ausgedrückt was kann den Fehler verursachen obschon die zu schliessende Applikation vor dem schliessen läuft. Zumal die Applikation sauber geschlossen wird.

      Gruß
      Dieter
      Mache Software wird nie fertig. Man muss sie für fertig erklären.

      Comment

      Working...
      X