Я сделал приложение в системном трее на C#, которое просто работает в фоновом режиме. Он прослушивает почтовый сервер с помощью Exchange WebServices и выполняет набор действий каждый раз, когда mailaccount получает сообщение. Он использует несколько приложений Excel, которые не работают должным образом, если я конвертирую в программу в службу (поэтому она должна быть системным приложением).Как я могу убедиться, что программа работает только один раз во всех сеансах на сервере Windows 2012?
Важно, чтобы программа не запускала больше, чем один раз за раз. Я добавил блокировку мьютекса, поэтому я не могу запускать программу более одного раза на одном сеансе. Однако проблема заключается в том, что когда я вхожу в другой сеанс на Windows Server (у него может быть два сеанса на пользователя), программа не отображается в системном трее, и я могу открыть ее снова, поэтому она запускается дважды, по одному в каждом сессия. Как я могу это предотвратить?
Благодаря
Создайте файл с зарезервированным именем, например. 'C: \ temp' и заблокировать его, поэтому экземпляр # 2 заметит и выйдет? –
Какое имя мьютекса? Если имя мьютекса начинается с Global \, оно является глобальным для всех сеансов служб терминалов. Вы также должны проверить разрешения мьютекса, чтобы они были доступны всем пользователям. –
см. Этот вопрос SO http://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in-c –