在安装/卸载过程之前,我们如何通过自定义操作检查应用程序是否打开
本文关键字:操作 自定义 何通过 检查 应用程序 是否 我们 卸载 安装 过程 | 更新日期: 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;
}
这只能做到,如果你保持集合属性相同(除了版本号),否则它将是系统的另一个应用程序,你只能通过名称搜索进程。