Αναγν. άρθρου: 922279 - Τελευταία αναθεώρηση: Παρασκευή, 24 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0

BUG: Μήνυμα λάθους κατά την εκτέλεση ενός προγράμματος Visual C++ που καλεί τη συνάρτηση execve ή τη συνάρτηση wexecve στο Visual Studio 2005: "Η εφαρμογή απέτυχε να προετοιμαστεί σωστά (0xc0150004)"

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Στο Microsoft Visual Studio 2005, όταν εκτελείτε ένα πρόγραμμα της Microsoft Visual C++ που καλεί τοexecveσυνάρτηση ή τοwexecveσυνάρτηση, ενδέχεται να λάβετε το ακόλουθο μήνυμα λάθους:
Η εφαρμογή απέτυχε να προετοιμαστεί σωστά (0xc0150004). Κάντε κλικ στο κουμπί "Οk", για να τερματίσετε την εφαρμογή. (directcd.exe - Application Error The application failed to initialize properly (0xc0000142). Click on Ok to terminate the application.).

Αιτία

Αυτό το ζήτημα προκύπτει, όταν ισχύουν οι ακόλουθες συνθήκες:
  • Ένα γονικό πρόγραμμα Visual C++ καλεί τοexecveσυνάρτηση ή τοwexecveσυνάρτηση για να φορτώσει και να εκτελέσει μια εξαρτημένη διεργασία
  • Για ναenvpη παράμετρος τουexecveσυνάρτηση ή τοwexecveη συνάρτηση περιέχει μια κενή συμβολοσειρά.

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτό το ζήτημα, βεβαιωθείτε ότι τοenvpη παράμετρος τουexecveσυνάρτηση ή τοwexecveσυνάρτηση δεν περιέχει μια κενή συμβολοσειρά.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα σφάλμα το οποίο παρουσιάζεται στα προϊόντα της που αναφέρονται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες

Τα ακόλουθα βήματα να αναπαραγάγετε το ζήτημα που αναφέρεται στην ενότητα "Συμπτώματα". Επιπλέον, τα βήματα δείχνουν τον τρόπο για να διορθώσετε το πρόβλημα, χρησιμοποιώντας τη μέθοδο που περιγράφεται στην ενότητα "Προτεινόμενη αντιμετώπιση".

Βήματα για την αναπαραγωγή του ζητήματος

  1. Για να δημιουργήσετε ένα έργο Visual C++ γονικό στοιχείο που ονομάζεται T.cpp.
  2. Προσθέστε το ακόλουθο παράδειγμα κώδικα για να T.cpp.
    #include <stdio.h>
    #include <process.h>
    #include <tchar.h>
    #include <stdlib.h>
    
    TCHAR * args1[] =
    {
     _T("child.exe"),
     0
    };
    
    TCHAR * envs2[] = 
    {
     _T(""),
     0
    };
    
    int main() {
     if ( _execve( "child.exe", args1, envs2   ) == -1 )
      {
       printf("failed\n");
       return 1;
      }
  3. Για να δημιουργήσετε ένα έργο Visual C++ παιδί που ονομάζεται Child.cpp.
  4. Προσθέστε το ακόλουθο παράδειγμα κώδικα για να Child.cpp.
    #include <stdio.h>
    
    int main() {
     printf("hello\n");
    }
    
    
  5. Μεταγλώττιση και εκτέλεση T.cpp και Child.cpp. Εμφανίζεται το μήνυμα λάθους που αναφέρεται στην ενότητα "Συμπτώματα" (Symptoms).
Για να διορθώσετε το ζήτημα που παρουσιάζεται μετά την αναπαραγωγή του ζητήματος, ακολουθήστε τα εξής βήματα:
  1. Στο T.cpp. επικολλήστε την ακόλουθη τιμή σε το[envs2]η παράμετρος για να αντικαταστήσετε την κενή συμβολοσειρά:
    "myenv=A"
    T.cpp τώρα μοιάζει με το ακόλουθο παράδειγμα κώδικα.
    #include <stdio.h>
    #include <process.h>
    #include <tchar.h>
    #include <stdlib.h>
    
    TCHAR * args1[] =
    {
     _T("child.exe"),
     0
    };
    
    TCHAR * envs2[] = 
    {
     _T("myenv=A"),
     0
    };
    
    int main() {
     if ( _execve( "child.exe", args1, envs2   ) == -1 )
      {
       printf("failed\n");
       return 1;
      }
  2. Μεταγλώττιση και εκτέλεση T.cpp. Το πρόγραμμα λειτουργεί σωστά.

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Standard Edition
Λέξεις-κλειδιά: 
kbtshoot kberrmsg kbexpertiseinter kbmt KB922279 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:922279  (http://support.microsoft.com/kb/922279/en-us/ )