当用户尝试在相同版本下打开新实例时,如何返回已打开的应用程序?

时间:2011-11-27 14:29:30

标签: c# vb.net

如果我的程序在运行相同版本时已经运行,我想打开现有实例。我注意到这个问题仅在名称存在的情况下被要求,但如果版本较旧,我只想通知用户旧版本仍在运行,“请在启动此版本之前删除旧版本。”

另一个链接就是这个: Return to an already open application when a user tries to open a new instance但如果检测到旧版本或更新版本,他们不会谈论关闭实例。

3 个答案:

答案 0 :(得分:3)

您可以使用我描述的here方法的变体以及使用here描述System.Threading.Mutex的方法。

我猜你可以有两个互斥锁。由GUID命名的互斥锁A和由GUID和版本号命名的互斥锁B.

您的新实例可以在启动时首先检查互斥锁A.如果互斥锁A不存在,则没有其他版本正在运行。如果存在互斥锁A,则某些其他版本正在运行。

然后,新实例可以使用它自己的版本号检查互斥锁B是否存在。如果B确实存在,那么另一个实例与新实例的版本相同,如果B不存在,则其他版本正在运行。

答案 1 :(得分:1)

如何使您的应用程序成为单例,从而将其限制为单个实例。

答案 2 :(得分:1)

如果已部署旧版本,则可能无法更改其中的代码。在这种情况下,您只需获取currently running进程并查找旧版本应用程序的exe名称,然后查找investigate the version number。如果它是旧版本,那么你可以做任何你想做的事。

如果您希望将来构建此功能,则可以创建namedpipe,并且新运行的应用程序将尝试连接到该管道以获取最新版本。