问题标签 [single-instance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
923 浏览

c# - 尝试启动第二个实例时出现 CantStartSingleInstanceException

我正在尝试使用此处概述的方法构建单实例应用程序。

我尝试使用该解决方案的原因是我需要将命令行从第二次尝试启动应用程序传递到第一个实例,这似乎是实现这一目标的最简单方法。

我需要支持的操作系统风格:

  • 视窗 XP SP3
  • 视窗 7 32 位
  • 视窗 7 64 位

我已经让它在所有三个操作系统版本上都可以工作,但是,我有一台装有 Windows 7 32Bit 的机器,它会因 CantStartSingleInstanceException而崩溃。

这是代码:

SingleInstanceController.cs:

程序.cs:

出于测试目的,该表单只是一个包含显示命令行参数的列表框的普通表单。

任何想法为什么这不能在那台机器上工作?搞了这两天,搞不懂。。。

0 投票
4 回答
3737 浏览

c# - Windows.Forms:激活已在右 FormWindowState 中运行的应用程序

我们的应用程序有以下要求:如果应用程序正在运行并且我再次启动应用程序,则必须激活第一个实例来打开一个新实例。

为了实现这一点,在主程序中我检查是否已经有一个正在运行的实例。如果是,我使用以下命令将第一个实例放在前面:

到目前为止,一切都按预期工作。此解决方案的唯一问题是,在第一个实例最小化的情况下,通过再次启动应用程序,第一个实例将处于活动状态,但不可见(仍然最小化)

这是我的问题。如何通过激活实例回到上一个 WindowState。我的解决方案是订阅 Form.Activated 事件并在 eventhandler 方法中执行以下代码:

但是使用这个解决方案我有一个问题,如果应用程序在最小化应用程序之前处于最大化状态,那么在激活它之后不要返回它。

有谁知道我该如何解决这个问题?有机会获得最后一个 windowState 吗?

在此先感谢您的帮助!

0 投票
1 回答
2122 浏览

c# - 在同一程序的多个实例之间同步

我手头有一个相当复杂的编程问题,所以请耐心等待几分钟。

我决定要在 WPF (C#) 中创建一个媒体播放器,但我遇到了一些麻烦。

我希望我的应用程序是单实例,这样当用户双击服务器文件时,程序只会运行一次并将所有文件排队播放。

我尝试了几种方法,包括 Microsoft 的单实例实现,但似乎没有任何效果,直到我决定创建自己的没有出现)

基本上,我使用命名互斥锁来防止打开多个实例,并强制其他实例将其参数写入文件,之后,创建互斥锁的实例将读取该文件。不用说,就性能而言,这非常非常无效,但无论如何,这是我对 Main() 函数的实现。请注意,这个 Main() 也是从头开始编写的,因为我不太喜欢 VS2010 自动生成的那个。

我也在使用这个类来尝试在线程之间同步

}

现在,基本上,对于每个双击文件,Windows 都会创建一个 Main() 函数实例。第一个实例控制了互斥体并继续做它想做的任何事情。其他实例必须将它们的参数写入文件。

现在,问题是:显然,线程(所有线程)没有正确同步,有时我得到 IO 异常。我不知道这些异常到底是在哪里引发的,因为 try-catch 块似乎什么都不做。事实上,我相信这比 try-catch 的作用要深一些。

那么,当用户双击大量文件时,我如何同步所有产生的线程?这个实现最多可以双击 3 个文件,有时(注意,有时它可以工作,其他时候不能)超过 3 个文件(测试最多 9 个)。到目前为止,我在 Internet 上发现的任何内容都无法说明独立运行的同一应用程序的多个实例。

如果能举个例子就好了:)

谢谢你。

0 投票
1 回答
3329 浏览

android - 'android:launchMode="singleInstance"' 不允许结果更新的活动

当设置为单个实例时,Activity 不允许另一个 Activity 使用 Activity for results 方法对其进行更新。我应该设置什么标志,这样我就不必将初始启动模式作为单实例删除?

注意:我正在使用另一个活动作为图像加载器,它会更新启动器活动。启动器活动应该是单个实例,因为我使用它来使用状态栏进行通知。

这是一个挑战,所以我不能使用另一个活动来通知。

0 投票
2 回答
248 浏览

python - 如何在 Python 中创建一个可以从不同模块访问的实例?

我正在编写一个连接到数据库的 Web 应用程序。我目前正在使用从其他模块导入的模块中的变量,但这感觉很讨厌。



问题是我获得了与数据库的多个连接(我猜是因为我application.py在两个不同的模块中导入,所以该Session.connect()函数被执行了两次)。

如何在不创建多个连接的情况下从多个模块访问(即在整个应用程序中db只调用一次)?Session.connect()

0 投票
5 回答
4065 浏览

java - 运行一个 java 应用程序实例

可能重复:
如何实现单实例 Java 应用程序?

有没有办法只运行一个 Java 应用程序实例,所以我只有一个进程?. 有可能在java中做到吗?

0 投票
1 回答
454 浏览

android - 返回调用应用程序时防止 SingleTask 应用程序关闭

我有两个应用程序,我将它们称为应用程序 A 和应用程序 B。应用程序 B 是单任务应用程序,通常,如果您从主屏幕启动此应用程序并使用返回按钮,您将无法返回主屏幕。现在假设应用 A 需要使用 Intent 调用应用 B。如果用户随后在应用程序 B 中使用返回按钮,我确实希望他们返回应用程序 A。但由于我覆盖了返回按钮,因此无法使用返回按钮返回应用程序 A。

我怎样才能返回到应用程序 A,但如果应用程序 A 调用它时应用程序 B 正在运行,那么它是否仍然在运行?如果在应用 A 调用它时应用 B 未运行,则应用 B 应在按下后退按钮时关闭(被销毁)。

我使用的是安卓 2.2

更新:

我尝试了以下方法:

如果调用应用程序通过检查传入的一些捆绑数据来启动活动,我将 returnToClient 设置为 true。

现在,如果我按下后退按钮,应用程序 B 将移至后台,应用程序 A 将移至前台。看起来不错。现在,如果我按下 Home 按钮然后启动应用程序 B,应用程序 B 就会从它停止的地方继续。也很好。现在是坏的部分。如果我长按 Home 按钮以调出历史列表,然后点击应用程序 B 的图标,则 onNewIntent 方法的调用方式与传入的数据完全相同,就好像应用程序 A 启动了活动。所以我猜测的是,Android 对待从主屏幕启动应用程序的方式与从历史记录列表中启动应用程序的方式不同。为什么?我不知道。似乎历史与谁有关最后启动活动并将捆绑数据作为该历史记录的一部分保存。这很奇怪,它会导致不需要的行为,使应用 B 看起来像是刚从应用 A 调用的。

0 投票
3 回答
1661 浏览

c# - 强制 TopShelf 服务的单个实例

我正在使用 TopShelf 来托管我的 Windows 服务。这是我的设置代码:

我需要确保我的应用程序只有一个实例可以同时运行。目前,您可以将其作为 Windows 服务和任意数量的控制台应用程序同时启动。如果应用程序在启动期间检测到其他实例,它应该退出。

我真的很喜欢基于互斥锁的方法,但不知道如何使用 TopShelf。

0 投票
4 回答
3863 浏览

c# - 只需一次启动应用程序 C#

我只是在 C# 中制作了一个应用程序,但我不喜欢。我想让应用程序只运行一次。现在,如果我的应用程序正在运行,当我再次运行该应用程序时,将启动另一个应用程序。我想让应用程序只能运行一次,如果你想再次运行应用程序,不是创建另一个应用程序,而是启动正在运行的应用程序。

谢谢。

0 投票
1 回答
1364 浏览

c# - 使用 EventWaitHandle 确保跨多个用户的单个实例

合作者使用 Processing 构建了一个原型,该原型连接到 Sparkfun RFID 阅读器,我认为使用的是通过 USB 的串行连接。我们已经将原型部署到了许多试用者的家中,而我愚蠢地忽略了一个常见的使用场景是用户切换。因此,我正在编写一个包装器,以确保只有一个原型应用程序实例在机器上的所有用户中运行。

作为一个简单的控制台应用程序,我正在测试我的第一次尝试。这是代码:

(注意,我知道这段代码存在以下问题:(1)杀死不是正在运行的原型的 Java 进程,以及(2)没有代码可以响应同时启动的大量实例,一次只有两个。但这不是我的问题是关于。)

在单个用户帐户下进行测试可以正常工作。我可以启动我的应用程序,它反过来启动原型,如果我启动我的应用程序的第二个实例,第一个实例会在第二个实例重新启动原型的另一个实例之前杀死原型的初始实例。

但是,如果我尝试从两个不同的用户帐户执行此操作,它会失败(静默)。如果我

  1. 启动我的应用程序的一个实例,它启动原型
  2. 切换用户
  3. 启动我的应用程序的一个实例,然后它在没有我的应用程序的情况下启动原型,从步骤 1 首先关闭现有实例。

谁能看到我的代码有什么问题?我应该如何在同一台机器上的多个同时用户会话中使用 EventWaitHandle?