2016-06-08 2 views
0

У меня есть приложение winforms, установленное на терминальной службе, к которой обращаются несколько пользователей. Это приложение поддерживает несколько экземпляров.Связь между winforms application multiple instance

После входа пользователя в систему загружаются некоторые параметры и т. Д. Происходит с другими пользователями.

Сначала я хотел бы получить все уже открытые экземпляры и получить их конкретную настройку. Цель состоит в том, чтобы не открывать новый экземпляр, если он уже открыт с одинаковыми настройками.

Возможно?

PS: На экране входа в систему пользователь может выбрать из выпадающего списка компанию, в которой вы хотите работать, чтобы он мог открыть экземпляр с компанией «A», а затем открыть другой экземпляр компании «B», таким образом имеют два экземпляра, один и тот же пользователь и компания разные.

+1

См. Эту статью о создании одного приложения-экземпляра, за исключением того, что вам нужно будет его изменить, чтобы имя системного мьютекса было основано на чем-то из информации учетной записи пользователя, например, имени пользователя. Таким образом, приложение представляет собой отдельный экземпляр внутри одного профиля. http://sanity-free.org/143/csharp_dotnet_single_instance_application.html –

+0

Приложение не может быть единственным экземпляром, поскольку пользователь может открывать несколько раз, но с использованием разных параметров, и в это время необходимо проверить настройки экземпляра, которые уже открыты для ознакомления если вы откроете другой. –

+0

Вы должны объяснить это требование лучше в своем вопросе. Это поможет вам получить лучшие ответы от людей, если они поймут это требование. –

ответ

1

В приложении program.cs вы можете использовать Mutex.

Наше приложение представляет собой набор приложений, которые начинаются с центрального 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());.