运行 只有一个 flutter 桌面应用实例

Run only single instance of flutter desktop application

我正在开发 Flutter 桌面应用程序。我只想执行应用程序的单个实例。但目前它允许我 运行 多个实例。如何只允许此应用程序的一个 .exe 文件 运行?

我遇到编译错误。

解决方案是 if 块末尾的这一行。

ReleaseMutex(hMutexHandle);

这是默认 flutter windows 应用程序属性中的自定义,因此我们必须为此目的使用 C++ 进行编码。单个 window 应用程序实例可以使用 Mutex 实现:

HANDLE hMutexHandle=CreateMutex(NULL, TRUE, L"my.mutex.name");
HWND handle=FindWindowA(NULL, "Test Application");

  if (GetLastError() == ERROR_ALREADY_EXISTS)
  {
     WINDOWPLACEMENT place = { sizeof(WINDOWPLACEMENT) };
         GetWindowPlacement(handle, &place);
         switch(place.showCmd)
         {
              case SW_SHOWMAXIMIZED:
                  ShowWindow(handle, SW_SHOWMAXIMIZED);
                  break;
              case SW_SHOWMINIMIZED:
                  ShowWindow(handle, SW_RESTORE);
                  break;
              default:
                  ShowWindow(handle, SW_NORMAL);
                  break;
          }
          SetWindowPos(0, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
          SetForegroundWindow(handle);
          return 0;
  }

打开 win32_window.cpp 文件并在 CreateAndShow() 方法的开头添加此代码片段会将应用程序限制为单个实例。