在安装/卸载过程之前,我们如何通过自定义操作检查应用程序是否打开

本文关键字:操作 自定义 何通过 检查 应用程序 是否 我们 卸载 安装 过程 | 更新日期: 2023-09-27 18:04:44

我用c# VS 2010开发了一个桌面应用程序。

我已经使用visual studio installer &自定义动作。

我们如何检查应用程序是打开的用户试图安装升级版本/卸载应用程序的用户得到通知消息通过自定义操作?

Thanks in advance

在安装/卸载过程之前,我们如何通过自定义操作检查应用程序是否打开

在Visual Studio设置中不支持这样做。这是因为所有Visual Studio安装自定义操作几乎都是在安装结束时运行的,在所有文件安装之后,所以在安装"之前"检查任何内容是没有用的。

事实上,许多安装程序不支持这个,因为它不是必需的。Windows将检查是否有任何正在使用的文件(及其加载的dll)将被替换,并将向用户显示一个正在使用的文件对话框,询问用户想要做什么,是关闭应用程序还是不关闭应用程序(这可能需要重新启动)。因此,用户可以选择要做什么,而不需要关闭应用程序。因此,不需要对任何可能的文件使用情况做任何事情。如果有问题,用户将得到一个关于正在使用的文件的对话框。

更彻底的应用程序与重启管理器集成,这样他们保存自己的状态,自动关闭,Windows将在更新后用他们的命令行重新启动它们,这意味着他们恢复状态,用户不丢失数据并继续。

也许你可以这样做:

/// <summary>
    /// Prüft ob die Anwendung bereits ausgeführt wird.
    /// </summary>
    /// <returns>
    /// <c>true</c> wenn die Anwendung bereits läuft,
    /// anderenfalls <c>false</c>.
    /// </returns>
    /// <remarks>n/a</remarks>
    private static bool AlreadyRunning()
    {
        Process current = Process.GetCurrentProcess();
        Process[] processes = Process.GetProcessesByName(
                                current.ProcessName);
        foreach (Process process in processes)
        {
            if (process.Id != current.Id)
            {
                if (Assembly.GetExecutingAssembly().Location
                    .Replace("/", "''") == current.MainModule.FileName)
                {
                    return true;
                }
            }
        }
        return false;
    }


这只能做到,如果你保持集合属性相同(除了版本号),否则它将是系统的另一个应用程序,你只能通过名称搜索进程。