Τον περιορισμό των εφαρμογών 32-bit σε μια εμφάνιση σε Visual C++

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 243953 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
ΣημείωσηMicrosoft Visual C++ 2005, Microsoft Visual C++.NET 2003 και Microsoft Visual C++.Υποστήριξη Καθαρής 2002 τόσο ο διαχειριζόμενος κώδικας υπόδειγμα που παρέχεται από τη Microsoft.NET Framework και η μη διαχειριζόμενη εγγενής Μοντέλο κώδικα Microsoft Windows. Οι πληροφορίες σε αυτό το άρθρο ισχύει μόνο για μη διαχειριζόμενο κώδικα Visual C++.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο ασχολείται με τον τρόπο για να περιορίσετε μια εφαρμογή με ένα η παρουσία. Η μέθοδος που χρησιμοποιείται σε αυτό το άρθρο δεν βασίζεται σε κάθε δημιουργία των windows. Επομένως, η μέθοδος μπορεί να χρησιμοποιηθεί για να περιορίσετε μια εφαρμογή με ένα η παρουσία που αναπτύχθηκε σε Visual C++. Αυτό περιλαμβάνει εφαρμογές κονσόλα, Εφαρμογές WinCE κατά αριθμό χαρακτήρων, στο παράθυρο διαλόγου με εφαρμογές, εφαρμογές που δεν διαθέτουν ένα περιβάλλον εργασίας χρήστη και άλλες εφαρμογές.

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

Η μέθοδος που χρησιμοποιείται σε αυτό το άρθρο είναι εκείνη που είναι περιγράφεται στο MSDN κάτω από το θέμα της WinMain. Χρησιμοποιεί τοCreateMutexσυνάρτηση για να δημιουργήσετε μια επώνυμη mutex που μπορεί να ελεγχθεί μέσω διεργασίες. Αντί να αναπαράγετε τον ίδιο κωδικό για κάθε εφαρμογή που θα χρησιμοποιήσει ως μεμονωμένη περίοδο λειτουργίας, ο κώδικας που πρέπει να είναι σε πρόγραμμα εξομοίωσης C++ η κλάση που μπορείτε να επαναχρησιμοποιήσετε σε κάθε εφαρμογή.

Για να χρησιμοποιήσετε αυτό λειτουργία, ακολουθήστε τα εξής βήματα:
  1. Δημιουργήστε ένα νέο αρχείο κεφαλίδας με το όνομα LimitSingleInstance.h, και στη συνέχεια να την προσθέσετε στο έργο σας.
  2. Αντιγράψτε τον παρακάτω κώδικα στο αρχείο LimitSingleInstance.h, και, στη συνέχεια, αποθηκεύστε το αρχείο:
    #ifndef LimitSingleInstance_H
    #define LimitSingleInstance_H
    
    #include <windows.h> 
    
    //This code is from Q243953 in case you lose the article and wonder
    //where this code came from.
    class CLimitSingleInstance
    {
    protected:
      DWORD  m_dwLastError;
      HANDLE m_hMutex;
    
    public:
      CLimitSingleInstance(TCHAR *strMutexName)
      {
        //Make sure that you use a name that is unique for this application otherwise
        //two apps may think they are the same if they are using same name for
        //3rd parm to CreateMutex
        m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
        m_dwLastError = GetLastError(); //save for use later...
      }
       
      ~CLimitSingleInstance() 
      {
        if (m_hMutex)  //Do not forget to close handles.
        {
           CloseHandle(m_hMutex); //Do as late as possible.
           m_hMutex = NULL; //Good habit to be in.
        }
      }
    
      BOOL IsAnotherInstanceRunning() 
      {
        return (ERROR_ALREADY_EXISTS == m_dwLastError);
      }
    };
    #endif
    					
    ΣημείωσηVisual C++ 2005, πρέπει να προσθέσετε επιλογή μεταγλωττιστή υποστήριξης χρόνου εκτέλεσης κοινής γλώσσας (/ clr:oldSyntax) για να μεταγλωττιστεί με επιτυχία το προηγούμενο δείγμα κώδικα. Για να προσθέσετε επιλογή μεταγλωττιστή υποστήριξης χρόνου εκτέλεσης κοινής γλώσσας, ακολουθήστε τα εξής βήματα:
    1. Κάντε κλικ στο κουμπίΈργο, και στη συνέχεια κάντε κλικ στο κουμπίΌνομα_έργουΙδιότητες.

      ΣημείωσηΌνομα_έργουείναι ένα σύμβολο κράτησης θέσης για το όνομα του έργου.
    2. Αναπτύξτε το στοιχείοΙδιότητες παραμέτρων, και στη συνέχεια κάντε κλικ στο κουμπίΓενικά.
    3. Στο δεξιό τμήμα του παραθύρου, κάντε κλικ για να επιλέξετεΥποστήριξη χρόνου εκτέλεσης κοινής γλώσσας, παλιά σύνταξη (/ clr:oldSyntax)με τοΥποστήριξη κοινή γλώσσα χρόνου εκτέλεσηςρυθμίσεις του έργου.
    4. Κάντε κλικ στο κουμπίΕφαρμογή, και στη συνέχεια κάντε κλικ στο κουμπίOK.
    Για περισσότερες πληροφορίες σχετικά με τις επιλογές του μεταγλωττιστή υποστήριξης χρόνου εκτέλεσης κοινής γλώσσας, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft Developer Network (MSDN) στο Web:
    http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
  3. #, συμπεριλάβετε το αρχείο LimitSingleInstance.h όπου η εγγραφή βρίσκεται το σημείο του προγράμματος. Εάν πρόκειται να χρησιμοποιηθεί σε μια εφαρμογή MFC, είναι το αρχείο όπου τοInitInstance()λειτουργία εφαρμογής βρίσκεται. Στο Win32 SDK εφαρμογή, αυτό είναι το σημείο όπου τοWinMain()συνάρτηση βρίσκεται. Σε μια εφαρμογή κονσόλας, αυτό είναι το σημείο όπου τοMain()συνάρτηση βρίσκεται.
    #include "LimitSingleInstance.H"
    					
  4. Δημιουργήστε μια καθολική παρουσία τουCLimitSingleInstanceΚλάση πριν από τη συνάρτηση σημείου εισόδου. Εάν αυτό που χρησιμοποιείται σε ένα Εφαρμογής MFC, η δημιουργία της περιόδου πριν από τηνInitInstance()η συνάρτηση.
  5. Διαβιβάστε ένα μοναδικό όνομα στην κατασκευή της γενικήςCLimitSingleInstanceη παρουσία. Συνιστάται να χρησιμοποιήσετε ένα μοναδικό όνομα έτσι άλλη εφαρμογή που μπορεί να χρησιμοποιεί αυτό το άρθρο θα δεν έρχονται σε διένεξη κατά τη διενέργεια της διπλότυπο έλεγχο. Ένας εύκολος τρόπος για να λάβετε ένα μοναδικό όνομα ότι κανείς άλλος θα έχουν είναι να χρησιμοποιήσετε το εργαλείο GUIDGEN. Για να αποκτήσετε πρόσβαση στο εργαλείο, κάντε κλικ στο κουμπίΈναρξη, Κάντε κλικ στο κουμπίΕκτέλεση, και στη συνέχεια πληκτρολογήστεGUIDGEN. IF για κάποιο λόγο, δεν έχετε το εργαλείο, το εργαλείο παρέχεται ως δείγμα στο MSDN. ΤύποςGUIDGENστο MSDN ευρετήριο για να το εντοπίσετε. Μάρκα Βεβαιωθείτε ότι χρησιμοποιείτε τοΜορφή μητρώουεπιλογή από το GUIDGEN το εργαλείο.
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    // Change what is passed to constructor. GUIDGEN Tool may be of help.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
    					
  6. Σας συνάρτησης σημείου εισόδου, καλέστε τοIsAnotherInstanceRunning()η μέθοδος στην καθολική παρουσία του τοCLimitSingleInstanceη κλάση και ελέγχου της επιστρεφόμενης τιμής. Εάν η συνάρτηση αποδίδει την τιμή TRUE, επιστροφή από τη συνάρτηση σημείου εισόδου. Διαφορετικά, συνεχίστε εκτέλεση κανονικά.

    Σε μια εφαρμογή MFC, μπορείτε να κάνετε κάτι παρόμοιο με το μετά από:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{05CA3573-B449-4e0b-83F5-7FD612E378E9}"));
    
    BOOL CSingleInstDlg5App::InitInstance()
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    
    //Rest of code.
    }
    						
    Σε μια εφαρμογή κονσόλας, μπορείτε να κάνετε κάτι παρόμοιο με το μετά από:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{9DA0BEED-7248-450a-B27C-C0409BDC377D}"));
    
    int main(int argc, char* argv[])
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return 0;
    //Rest of code.
    }
    						
    Σε μια εφαρμογή SDK Win32, μπορείτε να κάνετε κάτι παρόμοιο τα εξής:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{2194ABA1-BFFA-4e6b-8C26-D191BB16F9E6}"));
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int cmdShow)
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    //Rest of code.
    }
    						
Αφού ακολουθήσετε αυτά τα βήματα, δεν θα επιτρέψει την εφαρμογή περισσότερες από μία εμφανίσεις για να παραμείνει ενεργή την ίδια στιγμή.

ΣημείωσηΌταν εκτελείται από τις υπηρεσίες Terminal Services, χωρίς προσθήκη Global\ θα εγγυάται μία εμφάνιση ανά περίοδο λειτουργίας υπηρεσιών Terminal Services.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
					
Η προσθήκη "global\" θα εγγυάται ότι υπάρχει μόνο μία παρουσία του εφαρμογή σε έναν υπολογιστή. Αυτό ισχύει αν εκτελεί τις υπηρεσίες Terminal Services ή δεν.

Αναφορές

Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
238100Τον περιορισμό των 32-bit εφαρμογές MFC SDI σε μια μεμονωμένη εμφάνιση σε WinCE κατά αριθμό χαρακτήρων

Ιδιότητες

Αναγν. άρθρου: 243953 - Τελευταία αναθεώρηση: Πέμπτη, 27 Ιανουαρίου 2011 - Αναθεώρηση: 4.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Enterprise Edition
Λέξεις-κλειδιά: 
kbinfo kbhowto kbuidesign kbmt KB243953 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:243953

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com