目前我正在尝试在不使用“Single Instance”标志的情况下构建单例应用程序,这是由于应用程序的某些机制实际上需要多个实例(自我更新程序等)。所以我必须建立自己的方法来确保应用程序只有一个实例。
我已经完成了大约一半的创建,我已经到了
- 检测有多少实例正在运行
- 一种显示其他实例主窗口的方法(这是我卡住的地方)
问题是应用程序大部分时间在后台运行,隐藏,任务栏中没有项目。调用 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