我在多个用户访问的终端服务上安装了winforms应用程序。此应用程序支持多个实例。
用户登录后,会加载某些设置,其他用户也会这样做。
首先,我希望获得所有已打开的实例,并为其设置特定设置。如果已经使用相同的设置打开,则意图不是保持打开新实例。
有可能吗?
PS:在登录屏幕上,用户可以从组合框中选择您想要工作的公司,这样他就可以打开公司“A”的实例,然后再打开公司“B”的另一个实例两个实例,同一个用户和公司不同。
答案 0 :(得分:1)
您可以在应用程序Mutex
中使用program.cs
。
我们的应用程序实际上是一个以中央EXE开头的应用程序集合,然后EXE可以启动其他应用程序。此外,主要应用有三种口味。我们需要确保每个用户上下文中只有一个风格打开。
我们用这个:
Boolean createdNew;
var mut = new Mutex(true, Assembly.GetExecutingAssembly().FullName, out createdNew);
if (!createdNew)
{
if (String.IsNullOrEmpty(appName))
return;
var processName = Process.GetCurrentProcess().ProcessName;
foreach (var p in Process.GetProcessesByName(processName))
{
if (p.MainWindowTitle.Contains(appName))
{
if (userVars.SendDebugOutput)
{
//we found one already running...do anything about it?
}
return;
}
}
}
您需要修改互斥锁创建,以包含一个字符串,其中包含您在区分实例时需要使用的信息。
这将放在program.cs
代码页,之前启动主表单的行,例如Application.Run(new frmMyMainForm());
。