Al momento sei offline in attesa che la connessione Internet venga ristabilita

Come limitare le applicazioni a un'istanza di Visual c ++ a 32 bit

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 243953
Nota Microsoft Visual c ++ 2005, Microsoft Visual c ++ .NET 2003 e Microsoft Visual c ++ .NET 2002 supportano sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows. Le informazioni contenute in questo articolo si applicano solo al codice Visual C++ non gestito.
Sommario
In questo articolo viene descritto come limitare una sola istanza di un'applicazione. Il metodo che viene utilizzato in questo articolo non si basa sulla qualsiasi creazione di finestre. Di conseguenza, il metodo può essere utilizzato per limitare un'applicazione a un'istanza è stata sviluppata in Visual c ++. Sono inclusi le applicazioni console, applicazioni WinCE, finestra di dialogo casella basata delle applicazioni, applicazioni senza un'interfaccia utente grafica e altre applicazioni.
Informazioni
Il metodo che viene utilizzato in questo articolo è quello descritto nell'argomento WinMain in MSDN. Utilizza la funzione CreateMutex per creare un mutex denominato che può essere archiviato nei processi. Anziché duplicare lo stesso codice per ogni applicazione che verrà utilizzato come una singola istanza, il codice che occorre è in una classe di wrapper di c ++ è possibile riutilizzare in ogni applicazione.

Per utilizzare questa funzionalità, attenersi alla seguente procedura:
  1. Creare un nuovo file di intestazione con il nome LimitSingleInstance.h e quindi aggiungerlo al progetto.
  2. Copiare il codice riportato di seguito il file LimitSingleInstance.h e quindi salvare il file:
    #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					
    Nota In Visual c ++ 2005, in cui è necessario aggiungere l'opzione del compilatore supporto di common language runtime (/ CLR: oldSyntax) per compilare correttamente l'esempio di codice precedente. Per aggiungere il compilatore opzione supporto common language runtime, attenersi alla seguente procedura:
    1. Fare clic su progetto e quindi fare clic su proprietà ProjectName.

      Nota ProjectName è un segnaposto per il nome del progetto.
    2. Espandere la Proprietà di configurazione e quindi fare clic su Generale .
    3. Nel riquadro destro, fare clic su per selezionare supporto Common Language Runtime, vecchia sintassi (/ CLR: oldSyntax) in Common Language Runtime supporta le impostazioni del progetto.
    4. Fare clic su Applica e quindi fare clic su OK .
    Per ulteriori informazioni sulle common language runtime opzioni di supporto del compilatore, visitare il seguente sito Web MSDN (informazioni in lingua inglese):
  3. # include file LimitSingleInstance.h in cui è posizionato il punto di ingresso del programma. Se questa deve essere utilizzato in un'applicazione MFC, è il file in cui si trova la funzione InitInstance() per l'applicazione. In un SDK dell'applicazione è in cui è disponibile la funzione WinMain() . In un'applicazione console, è in cui si trova la funzione main() .
    #include "LimitSingleInstance.H"					
  4. Creare un'istanza globale della classe CLimitSingleInstance prima la funzione del punto di ingresso. Se questo viene utilizzato in un'applicazione MFC, è necessario creare l'istanza prima della funzione InitInstance() .
  5. Passare al costruttore dell'istanza CLimitSingleInstance globale di un nome univoco. Si consiglia di utilizzare un nome univoco in modo che un'altra applicazione stia utilizzando questo articolo non sarà in conflitto quando si esegue la verifica dei duplicati. Un modo semplice per ottenere un nome univoco che nessun altro avrà consiste la utilizzare lo strumento GUIDGEN. Per accedere allo strumento, fare clic su Start , scegliere Esegui e digitare GUIDGEN . Se per qualche motivo non è lo strumento, lo strumento viene fornito un esempio in MSDN. Tipo GUIDGEN nell'indice MSDN per individuarlo. Assicurarsi di utilizzare l'opzione Formato del registro in di GUIDGEN strumento.
    #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. Durante l'immissione funzione di punto, chiamare il metodo di IsAnotherInstanceRunning() l'istanza globale della classe CLimitSingleInstance e controllare il valore restituito. Se la funzione restituisce TRUE, restituire dalla funzione del punto di ingresso. In caso contrario, continuare l'esecuzione come di consueto.

    In un'applicazione MFC, è possibile eseguire qualcosa di simile al seguente:
    #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.}						
    in un'applicazione console, è possibile eseguire qualcosa di simile al seguente:
    #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.}						
    in un SDK applicazione Win32, è possibile eseguire qualcosa di simile le operazioni seguenti:
    #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.}						
Dopo aver seguito questi passaggi, l'applicazione non consentirà più istanze di rimanere attivo nello stesso momento.

Nota Quando si esegue in Servizi Terminal, aggiunta non che Global\ garantirà un'istanza per ogni sessione di Servizi Terminal.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));					
aggiunta "Global\" garantirà che è presente una sola istanza dell'applicazione in un computer. Questo si applica se Servizi Terminal è in esecuzione o non.
Riferimenti
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
238100Come limitare le applicazioni SDI di MFC a 32 bit a una singola istanza di WinCE
ora un capitolo 12 Advanced Windows HINSTANCE hPrevInstance singolo

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 243953 - Ultima revisione: 01/09/2006 20:40:08 - Revisione: 7.0

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 4.2 Professional Edition, Microsoft Visual C++ 4.2 Enterprise Edition, Microsoft Visual C++ 4.1 Subscription, Microsoft Visual C++ 4.0 Standard Edition

  • kbmt kbinfo kbhowto kbuidesign KB243953 KbMtit
Feedback
/html>