Ako limit 32-bitových aplikácií na jednu inštanciu v Visual c ++

Preklady článku Preklady článku
ID článku: 243953 - Zobraziť produkty, ktorých sa tento článok týka.
Poznámka: Microsoft Visual c ++ 2005, Microsoft Visual C++.NET 2003 a Microsoft Visual C++.NET 2002 podporu spravovaný kód model, ktorý je poskytované spoločnosťou Microsoft.NET Framework a nespravovaná rodák Microsoft Windows kód modelu. Informácie v tomto článku sa vzťahuje iba na nespravovaná Visual c ++ kód.
Rozbaliť všetko | Zbaliť všetko

SUHRN

Tento článok sa zaoberá obmedziť uplatňovanie jednej inštancia. Metóda, ktorá sa používa v tomto článku sa neopiera o každom vytvorenie systému windows. Preto možno použije metóda obmedziť uplatňovanie jednej inštancia, vyvinuté vo Visual C++. Toto zahŕňa konzoly aplikácie, WinCE aplikácie, dialógové okno založené aplikácií, aplikácií bez grafické používateľské rozhranie a iné aplikácie.

DALSIE INFORMACIE

Metóda, ktorá sa používa v tomto článku je ten, ktorý je opísané v MSDN pod WinMain tému. Používa Príkaz CreateMutex Funkcia vytvoriť pomenované mutex, ktoré môžu byť overené v celej procesy. Namiesto duplikácie rovnaký kód pre každú aplikáciu bude používať ako jednu inštanciu, kód, ktorý musíte mať je v C++ obalu triedy, ktoré môžete opätovné použitie cez každú žiadosť.

Na použitie tohto funkčnosť, postupujte nasledovne:
  1. Vytvoriť nový súbor hlavičku s názvom LimitSingleInstance.h, a potom pridajte do vášho projektu.
  2. Skopírujte nasledujúci kód do súboru LimitSingleInstance.h a potom súbor uložte:
    #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
    					
    Poznámka: V Visual c ++ 2005, musíte pridať spoločný jazyk runtime podporu kompilátor možnosť (/ clr:oldSyntax) úspešne zostaviť predchádzajúcej ukážke kódu. Pridať spoločný jazyk runtime podporu kompilátor možnosť, postupujte nasledovne:
    1. Kliknite na položku Project, a potom kliknite na tlačidlo ProjectName Vlastnosti.

      Poznámka: ProjectName je zástupný symbol pre názov projektu.
    2. Rozbaľte Konfigurácia vlastnosti, a potom kliknite na tlačidlo Všeobecné.
    3. Na pravej table kliknite na položku Vybrať Spoločné Language Runtime podporu, staré Syntax (/ clr:oldSyntax) v Spoločný jazykový modul Runtime support nastavenia projektu.
    4. Kliknite na položku Uplatňovať, a potom kliknite na tlačidlo ok.
    Ďalšie informácie o spoločný jazyk runtime kompilátor možnosti podpory nájdete na webovej lokalite Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
  3. # zahrnúť súbor LimitSingleInstance.h kde položka bod programu sa nachádza. Ak je používané v MFC Application to je súbor, kde InitInstance() Funkcia pre uplatňovanie sa nachádza. V systéme Win32 SDK aplikácia, je-li Funkcie WinMain() Funkcia sa nachádza. Aplikácia konzoly, je-li Main() Funkcia sa nachádza.
    #include "LimitSingleInstance.H"
    					
  4. Vytvoriť globálny inštanciu CLimitSingleInstance Trieda pred funkciu vstupného bodu. Ak to používa v MFC aplikácia, vytvoriť inštanciu pred InitInstance() Funkcia.
  5. Prejsť jedinečný názov projektanta globálnych CLimitSingleInstance inštancia. Odporúča sa použiť jedinečný názov takže ďalší aplikácie, ktoré môžu používať tento článok bude nie je v rozpore keď robiť Duplikovať kontrolu. Jednoduchý spôsob, ako dostať jednoznačný názov, ktorý nikto iný bude mať je použitie nástroja GUIDGEN. Nástroj zobrazíte kliknutím na Štart, kliknite na tlačidlo Spustiť, a potom zadajte GUIDGEN. Ak z nejakého dôvodu nemáte nástroj, nástroj sa poskytuje ako vzorky v MSDN. Typ GUIDGEN MSDN indexu to nájsť. Uistite sa musíte použiť Formát databázy Registry možnosť v GUIDGEN nástroj.
    #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. V vašu funkciu vstupného bodu hovoru IsAnotherInstanceRunning() metóda na globálnej inštancii programu CLimitSingleInstance Trieda a kontrola návratová hodnota. Ak funkcia vráti hodnotu TRUE, návrat z funkciu vstupného bodu. V opačnom prípade pokračovať výkon ako normálne.

    V aplikácii MFC môžete urobiť niečo podobné po:
    #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.
    }
    						
    Aplikácia konzoly, môžete urobiť niečo podobné po:
    #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.
    }
    						
    V aplikácii Win32 SDK, môžete urobiť niečo podobné nasledovné:
    #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.
    }
    						
Po vykonaní týchto krokov, uplatňovanie neumožní viac ako jedna inštancia zostali aktívni v rovnakom čase.

Poznámka: Keď spustený pod terminálových služieb, nie pridaním Global\ nebude zaručiť jedna inštancia za relácie terminálových služieb.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
					
Pridanie "Global\" bude garantovať, že existuje iba jedna inštancia aplikáciu v počítači. Toto platí, či je spustený terminálových služieb alebo nie.

ODKAZY

Ďalšie informácie získate po kliknutí na nasledujúce číslo článku databázy Microsoft Knowledge Base:
238100Ako limit MFC SDI 32-bitových aplikácií na jednu inštanciu na WinCE

Vlastnosti

ID článku: 243953 - Posledná kontrola: 23. októbra 2011 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbinfo kbhowto kbuidesign kbmt KB243953 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:243953

Odošlite odozvu

 

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