【问题标题】:What is the best way to prevent a user from starting an app while uninstall防止用户在卸载时启动应用程序的最佳方法是什么
【发布时间】:2012-11-13 18:17:49
【问题描述】:

我正在开发一个 C# windows 服务 + UI 应用程序。

我有一个问题,如果在卸载过程中用户试图启动 UI,那么卸载会损坏并卡住(因为 ui 持有一些文件的句柄并防止它们被删除)。

处理这种情况的最佳方法是什么?我想也许我应该在开始卸载过程时限制对 .exe 的访问,这样用户将无法启动它。

但我想知道是否有关于如何做到这一点的 BKM

编辑

应用程序已经安装在客户的机器上,所以我不能对应用程序本身进行任何更改。

我有一个升级安装程序,它可以在卸载过程中执行一些操作。升级安装程序首先卸载应用程序,然后重新安装。我只能将代码添加到升级安装程序,因此我不能使用互斥锁。 谢谢!

【问题讨论】:

  • 使用全局互斥标识符,当它不是新的时,退出应用程序。限制 .exe 是一些奇怪的 hack。
  • “处理这种情况的最佳方法是什么?” - 让安装程序发出警告,指出要删除的文件正在使用中。
  • 请告诉我们更多关于“卸载”的信息。是自酿的吗?处理锁定/正在使用的文件是一条老路,卸载过程应该可以正确处理这个问题。
  • @spender - 最知名的方法

标签: c# .net uninstallation


【解决方案1】:

你可以使用命名互斥体,它是windows核心对象,两个进程可以检查它是否已经注册。

卸载时只创建一个命名互斥体,并在进程启动时检查它是否存在

Here是如何创建命名互斥体

Here是如何检查是否存在

【讨论】:

    【解决方案2】:

    在卸载中杀死进程怎么样?

        public static bool KillProcess(string yourProcessName)
    {
        foreach (Process clsProcess in Process.GetProcesses())
        {
            if (Process.GetCurrentProcess().Id == clsProcess.Id)
                continue;
            if (clsProcess.ProcessName.Contains(name))
            {
                clsProcess.Kill();
                return true;
            }
        }
        return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2018-07-12
      • 2011-05-02
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多