現在オフラインです。再接続するためにインターネットの接続を待っています

1 つのインスタンスでは、Visual C の 32 ビット アプリケーションを制限する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:243953
メモ Microsoft Visual C 2005 では、Microsoft Visual の C++。NET 2003、および Microsoft Visual の C++。NET 2002 は両方のマネージ コードのサポートMicrosoft から提供されるモデルです。NET Framework とアンマネージ ネイティブMicrosoft Windows コード モデル。この資料の情報にのみ適用されます。Visual C のアンマネージ コードです。
概要
アプリケーションを 1 つに制限する方法についても説明しますインスタンス。この資料でを使用するメソッドは作成時に依存しません。windows の。メソッドを使用して、アプリケーション 1 つに制限するため、Visual C で開発されたインスタンスです。これには、コンソール アプリケーションが含まれています、WinCE アプリケーション、ダイアログ ボックス ベースのアプリケーションは、アプリケーションには、グラフィカル ユーザー インターフェイスで、その他のアプリケーション。
詳細
メソッドは、この資料で使用されているものmsdn に掲載されて [WinMain を説明します。それを使用して、 Createmutex 関数 間で調べることができます、名前付きミュー テックスを作成する関数処理します。同じ複製するのではなくすべてのアプリケーションにそのコードします。単一のインスタンスとしてを使用する場合は、必要なコードは 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].
    共通言語ランタイム サポートのコンパイラ オプションの詳細については、次のマイクロソフト開発ネットワーク (MSDN) Web サイトを参照してください。
  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.}						
    Win32 SDK のアプリケーションではのよう、次の手順します。
    #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.}						
次の手順に従うと、アプリケーションことはできません。1 つのインスタンスを同時にアクティブにしておきます。

メモ Global\ を追加しない] でターミナル サービスを実行するをしますターミナル サービスのセッションごとに 1 つのインスタンスを保証します。
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));					
"Global\"が追加されます保証のインスタンスが 1 つだけである、コンピューター上のアプリケーション。ターミナル サービスが実行されているかどうかこれは適用されますか不正解です。
関連情報
詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
238100WinCE の 1 つの 32 ビット MFC SDI アプリケーションを制限する方法
1 つの時間の章 12 高度な Windows の HINSTANCE hPrevInstance1 つ

警告: この記事は自動翻訳されています

プロパティ

文書番号:243953 - 最終更新日: 07/22/2011 15:34:00 - リビジョン: 9.0

  • kbhowto kbinfo kbuidesign kbmt KB243953 KbMtja
フィードバック
>