2009-01-05 9 views

Trả lời

15

Hãy thử cách này: Single instance application. Ive sử dụng phương pháp thứ hai và nó hoạt động tốt.

+1

phương pháp thứ hai là tốt nhất mà tôi đã tìm thấy. chỉ cần có được trên thực tế nó sử dụng Microsoft.VisualBasic DLL và nó làm mọi thứ khác bạn cần - bao gồm cả việc sử dụng thích hợp của NET remoting (không có ổ cắm hoặc mutexes để tạo cho mình). nhưng tốt nhất là làm cho nó dễ dàng chuyển các tham số đến ứng dụng đang chạy, hoặc đơn giản là đưa nó lên phía trước khi bạn thử mở lại nó –

29

http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx

Không yêu cầu VB.DLL như một số ví dụ khác. Có mã mẫu WPF. Chuyển bất kỳ dòng cmd nào vào dụ ban đầu.

+2

Tôi thực sự thích phương pháp này, nó cho phép bạn làm những việc như kích hoạt cửa sổ thu nhỏ nếu người dùng cố gắng chạy lại chương trình. – Andy

+0

Đây là một blog không phải thương mại của Microsoft [giấy phép] (https://www.microsoft.com/en-us/legal/intellectualproperty/copyright/default.aspx). Tài nguyên đã được phát hành bằng msdn với một giấy phép khác. Xem câu trả lời của tôi về chủ đề này. –

0

Check-out giải pháp này: Allowing only one instance of a WPF application to execute

Điều này không chỉ thực thi một ví dụ của một ứng dụng, nhưng nó cũng mang lại cho tập trung ứng dụng hiện tại của bạn khi một thể hiện thêm một ứng dụng được chạy. Giải pháp mutex của tôi để hạn chế một cá thể thực sự khác với liên kết ở trên, nhưng tôi thích phần tử "tập trung" vào giải pháp này.

2

tôi sử dụng phương pháp helper này và gọi nó là từ sự kiện application.startup

Public Sub ForceSingleInstanceApplication() 
     'Get a reference to the current process 
     Dim MyProc As Process = Process.GetCurrentProcess 

     'Check how many processes have the same name as the current process 
     If (Process.GetProcessesByName(MyProc.ProcessName).Length > 1) Then 
      'If there is more than one, it is already running 
      MsgBox("Application is already running", MsgBoxStyle.Critical, My.Application.Info.Title) 'Reflection.Assembly.GetCallingAssembly().GetName().Name) 
      ' Terminate this process and give the operating system the specified exit code. 
      Environment.Exit(-2) 
      Exit Sub 
     End If 
    End Sub 
0

tài sobelito liên kết this bưu điện, trong đó có những điều sau update. Những gì nó nói là cho một nguồn tài nguyên cập nhật, bạn nên sử dụng Windows 7 Taskbar Single Instance, mà nếu bạn nhìn vào nguồn sẽ cho phép bạn làm những gì bạn cần.

Bạn có thể sử dụng dự án SingleInstance C#. Nó cũng chứa các mẫu cho cả WinForms và WPF.

Lưu ý rằng nó cũng được phát hành theo giấy phép Apache 2.0, không giống như bài đăng Poznanski của Arik trong Blog của Microsoft, là (IANAL, AFAIK) không có sẵn trên thị trường.