Класс процесса и безопасность .NET? - PullRequest
0 голосов
/ 25 марта 2009

Я использую класс Process в своем приложении, в самом начале статический метод Main. Я использую класс Process, чтобы знать, если другой экземпляр моего приложения в данный момент запущен. Если моя заявка уже работает, я выйду. я не ищу способ изменить это, это работает годами

Но в последнее время это не работает на некоторых компьютерах наших пользователей, я получаю сообщение об ошибке «Common Language Runtime Debugging Services: Приложение сгенерировало исключение, которое не может быть обработано ".

Я уже полностью доверяю сборке, а пользователь является администратором системы.

любые идеи помогут Спасибо !!

Редактировать: Служба адаптера производительности WMI включается до того, как выдается ошибка, и выключается после ее возникновения. Я пропускаю какое-то разрешение?

это в Framework 1.1

Ответы [ 5 ]

4 голосов
/ 25 марта 2009

Хотя я не могу предположить, почему ваш процесс падает, лучшим решением будет использование именованного мьютекса:

static void Main()
{
  bool mutexWasCreated;
  using (Mutex mutex=new Mutex(true, AppID, out mutexWasCreated))
  {
    // check for single instance
    if (!mutexWasCreated)
      return;

    Application.Run(...);
  }
}
1 голос
/ 25 марта 2009

Я помню похожую проблему с некоторым кодом .net, над которым я работал. Это было в среде Citrix.

Пользователь должен был быть членом группы производительности, я считаю, чтобы иметь возможность запускать Process.GetProcessesByName () ... Это на самом деле нежелательно!

Я думаю, что у нас было два обходных пути - первый был в начале кода, и он должен был запускать код из сценария VB, который проверял, выполняется ли код уже или нет.

Второй обходной путь был частью кода, который устанавливал фокус окна. Здесь мы просто запускаем AppActivate () в блоке try / catch - что, я думаю, вы могли бы сделать - если AppActivate завершится неудачно, вам нужно запустить приложение.

Надеюсь, это поможет!

1 голос
/ 25 марта 2009

Я согласен с Бранном. Трудно устранить неполадки, если вы не знаете, какое исключение выдается. Я слушал событие unhandledexception и регистрировал проблему как первый шаг в устранении этого.

1 голос
/ 25 марта 2009

Не могли бы вы добавить перехват попытки верхнего уровня (или использовать обработчик UnhandledException), чтобы увидеть, какой тип исключения генерируется? Это было бы очень полезно.

0 голосов
/ 25 марта 2009

Я использую класс Process, чтобы узнать, запущен ли другой экземпляр моего приложения.

.Net предоставляет для этой цели событие приложения StartupNextInstance.

Хм ... неважно. Похоже, это доступно только из Visual Basic. Я оставлю здесь ответ, если он пригодится кому-то другому.

...