我正在开发一个C#windows服务+ UI应用程序。
我遇到的问题是,如果在卸载过程中用户尝试启动UI,则卸载会被破坏并卡住(因为ui保存了某些文件的句柄并阻止它们被删除)。
处理这种情况的最佳方法是什么?我想也许我应该在开始卸载过程时严格访问.exe,因此用户将无法启动它。
但我想知道是否有BKM如何做到这一点
修改
应用程序已安装在客户的计算机上,因此我无法对应用程序本身进行任何更改。
我有一个升级安装程序,可以在卸载过程中执行操作。升级安装程序首先卸载该应用程序,然后重新安装。我只能将代码添加到升级安装程序,因此我不能使用互斥锁。 谢谢!
答案 0 :(得分:0)
您可以使用已命名的互斥锁,它是Windows核心对象,两个进程可以检查它是否已经注册。
卸载时只需创建一个命名的互斥锁,并检查它是否存在于进程启动
Here是如何创建命名的互斥锁
Here是如何检查它是否存在
答案 1 :(得分:0)
如何在卸载过程中终止进程?
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;
}