如何在单声道下强制应用程序的单实例?

2023-12-09

因此,我能够在 Windows 上强制执行应用程序的单个实例,如下所示。

[STAThread]
class method Program.Main(args: array of string);
begin
  var mutex := new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
  if mutex.WaitOne(Timespan.Zero, true) then
  begin
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.ThreadException += OnThreadException;
    lMainForm := new MainForm;
    lMainForm.ShowInTaskbar := true;
    lMainForm.Visible := false;

    Application.Run(lMainForm);
  end
  else
    MessageBox.Show("Another copy running!!!");
end;

但是,在单声道 Linux 上运行相同的应用程序时,此代码根本不起作用。我能够运行多个副本。我不知道这是否与我在终端上启动应用程序有关mono MyPro.exe。如果这是问题所在,您是否需要在执行命令行之前传递一些值。

提前致谢,


正如 Adrian Faciu 提到的那样,您需要在单声道中启用共享内存才能使您的方法发挥作用,但这不是最好的方法(首先默认情况下禁用它是有原因的,即使我现在不记得确切的原因) 。

我过去使用过两种解决方案:

  • 基于文件的锁。创建一个已知文件,将 pid 写入该文件。在应用程序启动时,检查该文件是否存在,如果存在,则读取 pid 并检查是否有任何正在运行的进程具有该 pid(以便它可以从崩溃中恢复)。并在退出时删除该文件(在首先创建它的实例中)。缺点是,如果几乎同时启动多个实例,则启动时会出现竞争条件。您可以通过文件锁定来改进这一点,但您可能必须使用 P/Invokes 在 Linux 上执行正确的文件锁定(我不完全确定托管 API 会执行您所期望的操作)。

  • 基于 socked 的锁。打开已知端口。与上述相比的优点是您不需要进行任何清理,并且没有竞争条件。缺点是您需要一个固定/已知的端口,并且其他一些程序可能会同时使用该端口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在单声道下强制应用程序的单实例? 的相关文章

随机推荐

  • 使用cat函数写入csv文件

    我需要使用 cat 函数向 CSV 添加新行 请你们帮帮我好吗 我对 R 的了解有限 这是文件 name1 csv 系统要求我将我的姓名和学生 ID 添加到前几行 homework1 lt data frame homework1 Tota
  • 将多个项目添加到列表中

    static class Program static void Main string carMake string carModel string carColour string bikeModel string bikeMake s
  • 添加边框时 CSS Div 跳转

    我不明白为什么当我将鼠标悬停在第一个框 左上角 上时 框会发生变化 我已将 box sizing 设置为 border box 因此悬停时添加的边框不会产生影响 并且它只发生在第一个框上 请帮忙 JS小提琴here box sizing b
  • AngularJS 中防止 IE 缓存的更好方法?

    我目前使用 service resource 进行 ajax 调用 在本例中为 GET 并且 IE 缓存这些调用 以便无法从服务器检索新数据 我使用了通过谷歌搜索找到的一种技术来创建一个随机数并将其附加到请求中 这样 IE 就不会去缓存数据
  • mc:edit 不适用于具有 Mandrill Javascript API 的 Mailchimp 模板

    我正在尝试使用 Mailchimp 模板通过 Mandrill API 发送电子邮件 我正在使用 Parse com 在云代码中执行此操作 请参阅此处https www parse com docs cloud modules guide
  • React Native TypeError:网络请求因 fetch() 失败

    我正在使用 React Native 来开发 Android 应用程序 通过此获取请求 我收到错误TypeError network request failed fetch https pixabay com api key MY KEY
  • R 中的自动虚拟变量

    我有以下创建的数据框 temp lt as data frame with uadm table prlo state code 我希望创建 11 个虚拟变量 前 10 名各一个 其他 一个 可以通过以下方式轻松找到前 10 名 top10
  • R过滤器包含子字符串多个条件

    嘿 我有一个 500K 行的列表 我需要按条件进行过滤 其中必须包含某些子字符串 另一个包含 20 个子字符串的列表 我在用dplyr现在打包 我的代码如下所示 result lt data gt filter grepl sub1 col
  • Java邮件与土耳其字符的问题

    我在使用 Java 代码发送的邮件中显示土耳其语字符时遇到问题 这些字符在邮件中显示为问号 Message msg new MimeMessage mailSession msg setHeader Content Encoding ISO
  • SetWindowsHookEx 全局键盘挂钩未捕获所有按键

    我正在编写属于自动化系统一部分的代码 我想添加一个键盘钩子来提前结束测试 我通过使用 SetWindowHookEx 来做到这一点 我的代码看起来很像这样 http support microsoft com kb 318804 这是我的
  • 全局变量值不可在多个函数中使用

    使用 Google Apps 脚本 我尝试创建一个可在多个函数中使用的全局变量 例如数组 但我似乎无法在任何地方找到答案 我需要它才能使我的 Google 电子表格正常工作 Code var infoSheetArray null func
  • 将 Shiro 的 PasswordMatcher 与自定义领域结合使用

    我使用 Apache Shiro 和自定义 JDBC 领域来从数据库中检索用户的盐 密码 哈希算法名称和哈希迭代次数 这些数据都存储为单独的列 问题是我不确定在使用 PasswordMatcher 验证用户密码与数据库中存储的密码是否匹配时
  • 为什么PyGame动画闪烁

    所以我运行代码 它就开始出现故障 我是 pygame 的新手 这是代码 import pygame pygame init Screen Pixels by Pixels X and Y X right and left Y up and
  • Windows下每5分钟运行一次python脚本

    我有一个简单的 python 脚本从 html 页面抓取一些数据并将结果写入 csv 文件 如何自动化抓取 即在 Windows 下每五分钟启动一次 谢谢 彼得 查看此链接 http blogs esri com esri arcgis 2
  • 如何检查区域设置是否为 UTF-8?

    我正在与 Yocto 合作 为 ARM 设备 i MX 6Quad 处理器 创建嵌入式 Linux 发行版 我已经使用变量配置了所需区域设置的列表 IMAGE LINGUAS de de fr fr en gb en gb iso 8859
  • 如何在 C# 中从 IntPtr 获取 byte[]

    我想通过一个IntPtr一个方法需要一个byte C 中的参数 这可能吗 如果可能的话我该怎么做 thx 查看Marshal Copy method byte managedArray 1 2 3 4 5 int size Marshal
  • 抽象方法的目的是什么?

    abstract public class car abstract void drive 正如上面的代码片段所示 Java 中抽象方法的具体用途是什么 据我所知 根据定义 他们不允许拥有身体 通过声明抽象方法 您并没有提供实现 而是强制扩
  • 使用 Pandas 将重复项提取到新数据框中

    我有一个包含很多列的大型数据框 其中一列应该是唯一 ID 另一列是年份 不幸的是 唯一 ID 列中有重复项 我知道如何生成所有重复项的列表 但我真正想做的是将它们提取出来 以便仅保留第一个条目 按年份 例如 数据框当前看起来像这样 带有一堆
  • 从 Fortran 运行时 METIS 段错误

    我正在尝试使用METIS用于网格划分的库 作为我为有限元计算编写的 Fortran 程序的一部分 METIS 是用 C 编写的 但它应该可以与 Fortran 90 一起正常工作 但我不断遇到段错误 一个潜在的问题是 我向一些参数提供了空指
  • 如何在单声道下强制应用程序的单实例?

    因此 我能够在 Windows 上强制执行应用程序的单个实例 如下所示 STAThread class method Program Main args array of string begin var mutex new Mutex t