Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để hạn chế các ứng dụng 32-bit đến một ví dụ trong Visual C++

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:243953
Chú ý Microsoft Visual C++ 2005, Microsoft Visual C++.NET 2003, và Microsoft Visual C++.NET 2002 hỗ trợ cả hai mã được quản lý mô hình được cung cấp bởi Microsoft.NET Framework và nguồn gốc không được quản lý Microsoft Windows mã mô hình. Thông tin trong bài viết này chỉ áp dụng cho không được quản lý Visual c ++ mã.
TÓM TẮT
Bài viết này bàn về cách để giới hạn ứng dụng một Ví dụ. Phương pháp được sử dụng trong bài viết này không dựa trên bất kỳ sáng tạo của windows. Vì vậy, các phương pháp có thể được sử dụng để giới hạn ứng dụng một trường hợp được phát triển trong Visual C++. Điều này bao gồm các ứng dụng giao diện điều khiển, Các ứng dụng winCE, hộp thoại dựa trên ứng dụng, mà không có một giao diện người dùng đồ họa, và các ứng dụng.
THÔNG TIN THÊM
Phương pháp được sử dụng trong bài viết này là một trong đó là mô tả trong MSDN theo đề WinMain. Nó sử dụng các CreateMutex chức năng để tạo ra một mutex được đặt tên theo đó có thể được kiểm tra trên quy trình. Thay vì của nhân đôi cùng mã cho mỗi ứng dụng mà bạn sẽ sử dụng như là một ví dụ đơn, mã mà bạn phải có trong một wrapper C++ lớp mà bạn có thể tái sử dụng trên mỗi ứng dụng.

Để sử dụng này chức năng, làm theo các bước sau:
  1. Tạo một tập tin tiêu đề mới với tên LimitSingleInstance.h, và sau đó thêm nó vào dự án của bạn.
  2. Copy đoạn mã sau vào tập tin LimitSingleInstance.h, và sau đó lưu tệp:
    #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					
    Chú ý Visual C++ 2005, bạn phải thêm phổ biến hỗ trợ thời gian chạy ngôn ngữ biên dịch tùy chọn (/ clr:oldSyntax) để thành công biên dịch mẫu mã trước đó.Để thêm phổ biến hỗ trợ thời gian chạy ngôn ngữ biên dịch tùy chọn, hãy làm theo các bước sau:
    1. Nhấp vào Dự án, và sau đó nhấp vào ProjectName Thuộc tính.

      Chú ý ProjectName là một giữ chỗ cho tên của dự án.
    2. Mở rộng Cấu hình thuộc tính, và sau đó nhấp vào Tổng quát.
    3. Trong ngăn bên phải, nhấp vào để chọn Hỗ trợ thời gian chạy ngôn ngữ phổ biến, cú pháp cũ (/ clr:oldSyntax) trong các Phổ biến thời gian chạy ngôn ngữ hỗ trợ dự án thiết đặt.
    4. Nhấp vào Áp dụng, và sau đó nhấp vào Ok.
    Để biết thêm chi tiết về phổ biến hỗ trợ thời gian chạy ngôn ngữ biên dịch tùy chọn, ghé thăm Web site sau của Microsoft Developer Network (MSDN):
  3. # bao gồm các tập tin LimitSingleInstance.h nơi các mục nhập điểm của chương trình có vị trí. Nếu điều này là để được sử dụng trong một ứng dụng MFC, nó là tập tin nơi các InitInstance() chức năng cho các ứng dụng có vị trí. Trong một Win32 SDK ứng dụng, nó là nơi mà các WinMain() chức năng có vị trí. Trong một ứng dụng giao diện điều khiển, đây là nơi các Main() chức năng có vị trí.
    #include "LimitSingleInstance.H"					
  4. Tạo một thể hiện toàn cầu của các CLimitSingleInstance lớp học trước khi điểm nhập hàm. Nếu điều này đang được sử dụng trong một Ứng dụng MFC, tạo thể hiện trước khi các InitInstance() chức năng.
  5. Vượt qua một tên duy nhất cho các nhà xây dựng của toàn cầu CLimitSingleInstance Ví dụ. Đó khuyến cáo rằng bạn sử dụng một tên duy nhất cho một ứng dụng có thể sử dụng bài viết này sẽ không xung đột khi làm việc lặp lại kiểm tra. Một cách dễ dàng để có được một tên duy nhất mà không ai khác sẽ có là để sử dụng công cụ GUIDGEN. Để truy cập vào các công cụ, nhấp Bắt đầu, Nhấp vào Chạy, và sau đó gõ GUIDGEN. Nếu Đối với một số lý do bạn không có công cụ, công cụ được cung cấp như một mẫu trong MSDN. Loại GUIDGEN trong chỉ mục của MSDN để tìm nó. Làm cho chắc chắn rằng bạn sử dụng các Định dạng đăng ký tùy chọn trong GUIDGEN công cụ.
    #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. In của bạn điểm nhập hàm, gọi cho các IsAnotherInstanceRunning() phương pháp trên thể hiện toàn cầu của các CLimitSingleInstance lớp và kiểm tra giá trị trả lại. Nếu chức năng trả về TRUE, trở về từ điểm nhập hàm. Nếu không, tiếp tục thực hiện như bình thường.

    Trong ứng dụng MFC, bạn có thể làm điều gì đó tương tự như các sau:
    #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.}						
    Trong một ứng dụng giao diện điều khiển, bạn có thể làm điều gì đó tương tự như các sau:
    #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.}						
    Trong một ứng dụng SDK Win32, bạn có thể làm một cái gì đó tương tự như sau:
    #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.}						
Sau khi các bước sau, ứng dụng sẽ không cho phép nhiều hơn một ví dụ để vẫn hoạt động cùng một lúc.

Chú ý Khi chạy theo dịch vụ đầu cuối, không thêm Global\ sẽ đảm bảo một ví dụ trong dịch vụ đầu cuối phiên làm việc.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));					
Thêm "global\" sẽ đảm bảo là chỉ có một thể hiện của các ứng dụng trên một máy tính. Điều này áp dụng cho dù Terminal Services đang chạy hoặc không.
THAM KHẢO
Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
238100Làm thế nào để hạn chế các ứng dụng MFC SDI 32-bit đến một ví dụ đơn trên WinCE
một trong những thời gian chương 12 Advanced Windows HINSTANCE hPrevInstance đĩa đơn

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 243953 - Xem lại Lần cuối: 08/21/2011 09:43:00 - Bản sửa đổi: 2.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 KbMtvi
Phản hồi
>