【问题标题】:Return to an already open app when a user tries to open a new instance if same version? [duplicate]当用户尝试打开相同版本的新实例时返回到已打开的应用程序? [复制]
【发布时间】:2011-11-29 09:55:58
【问题描述】:

如果我的程序已经在运行,我想打开一个现有实例,前提是它运行相同的版本。我注意到这个问题只询问了名称是否存在,但是如果版本较旧怎么办,我只想通知用户旧版本仍在运行,请在启动此版本之前删除旧版本。

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

【问题讨论】:

  • 获取所有进程列表和 foreach 程序集名称、版本等。如果您发现相同的程序集名称和版本 - 关闭您的实例。
  • 有没有可能把这两者合并在一起...哎呀

标签: c# vb.net


【解决方案1】:

以最简单的方式进行检查:

foreach (var proc in Process.GetProcesses())
            if (proc.MainModule.FileName == Process.GetCurrentProcess().MainModule.FileName)
                //Shutdown your copy.

但更复杂的事情可能是这样的:

foreach (var proc in Process.GetProcesses())
        {
            if (proc.Id == Process.GetCurrentProcess().Id) continue;
            var currName = AssemblyName.GetAssemblyName(Process.GetCurrentProcess().MainModule.FileName);
            var procName = AssemblyName.GetAssemblyName(proc.MainModule.FileName);
            if (currName.FullName == procName.FullName && /*and other parameters*/)
                return;
        }

祝你好运!

P.S.:“但要小心 - “GetAssemblyName”仅适用于托管代码程序集,因此请使用 try-catch wrap。”

【讨论】:

  • 感谢您的评论。如果决策树有较新版本、当前版本和较旧版本,是否可以更深入地研究决策树。我知道 Windows 安装程序可以执行某些操作来检测这一点。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多