【发布时间】:2013-02-06 04:07:25
【问题描述】:
目前我正在尝试在不使用“单实例”标志的情况下构建单例应用程序,这是由于应用程序的某些机制实际上需要多个实例(自我更新程序等)。所以我必须建立自己的方法来确保应用程序只有一个实例。
我已经完成了大约一半,我已经到了
- 检测有多少实例正在运行
- 一种显示其他实例主窗口的方法(这是我卡住的地方)
问题是应用程序大部分时间在后台运行,隐藏,任务栏中没有项目。调用process.MainWindowHandle时,总是返回0,该函数检测当前的“MainWindow”需要窗口是A)可见B)在任务栏中显示。
这个限制是否存在?
我能想到但没有实现想法的方法是在应用程序第一次可见时存储 MainWindowHandle,但我将如何公开此值?
当前代码:
Dim running_processes As Process() = Process.GetProcessesByName("helpdesk")
Dim current_process_id As Integer = Process.GetCurrentProcess().Id
If (running_processes.Length = 1) Then
'Run the app like normal
bootstrap_loader.Show()
Else
For Each process As Process In running_processes
If process.Id = current_process_id Then Continue For
'MainWindowHandle returns 0 when window is not visible
'Sidenote: ShowWindow is from user32.dll :)
ShowWindow(process.MainWindowHandle, SHOW_WINDOW.SW_NORMAL)
'Exit the application like a baws
'Environment.Exit(2)
Next
End If
【问题讨论】: