Требуется приложение WinForms для отключения до удаления

StackOverflow https://stackoverflow.com//questions/10662621

Вопрос

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

У меня есть пара проектов, создаваем в Visual Studio 2008, используя проекты C #, WinForm. Один использует клик-один раз установки, и в одном использовании проекта настройки. Они оба позволяют вам покинуть приложение, когда вы удалите. В Windows 7 вы получаете предупреждение, но имейте возможность оставить его в любом случае ... на XP даже не предупреждение.

Позвони мне сумасшедшим, но мысль всех моих программных файлов удалена, и мое приложение все еще осталось работать, не звучит как хороший дизайн вообще. Воспоминания о GPFS приходят на ум, или путь .NET использует задержку задержки для DLL, также может быть проблемой, когда необходимо загрузить DLL, и исчезнет.

Так что есть просто простой способ не разрешить удаление, если ваше приложение все еще работает?

Я использую C #, но я использую класс Single экземпляра VB.NET, чтобы убедиться, что мое приложение работает только один раз, поэтому, возможно, что-то, что использует это, в отличие от создания Mutex для проверки?

Также мое приложение позволяет только «за пользователя» устанавливает, а не «все пользователи», поэтому мне не нужно беспокоиться о моем приложении, запущенном на другом сеансе (если оно есть, это нормально, чтобы оставаться запущенным, потому что это должно быть 100% его собственная копия).

Редактировать: , поскольку я не нахожу ничего другого, я пробовал идею Mutex и не работает. Вот мой код:

В приложении у меня есть это для создания именованного мьютекса и сохраняйте живые во время работы приложения:

        System.Threading.Mutex m = new System.Threading.Mutex(true, "SafeShare");

        SingleInstanceApplication.Run(TabForm, NewInstanceHandler);

        GC.KeepAlive(m);
.

В действии удаления у меня есть это, пока они не выйдут (так как не может быть легко предоставить опцию Отмена):

            while (true)
            {
                bool createdNew;
                System.Threading.Mutex m = new System.Threading.Mutex(true, "SafeShare", out createdNew);
                m.ReleaseMutex();
                if (createdNew)
                    break;
                MessageBox.Show(null,"Close XXX and click OK to continue uninstall.","Uninstall");
            }
.

ButeNew никогда не устанавливается в действии удаления, почти как он работает под другим сеансом или что-то в этом роде. Я не пытался добавить глобальную \ на имя мьютекса, но в любом случае, это не будет хорошо работать для моего приложения, потому что я делаю для устанавливаемых для каждого пользователя, поэтому одна установка должна быть в состоянии продолжать работать на другом сеансе, даже если он удалит. < / P >.

Это было полезно?

Решение

Краткий ответ - это просто простой способ сделать это, потому что это не то, что Microsoft не хочет, чтобы вы сделали.

Мой ответ в конечном итоге, используя Mutex, как только я получил код исправления, кажется, работает нормально.

В приложении я делаю:

System.Threading.Mutex m = new System.Threading.Mutex(true, "MyMutexNameHere");
SingleInstanceApplication.Run(TabForm, NewInstanceHandler);
GC.KeepAlive(m); 
.

ОдноinstanceApplication.run Line - это то, что запускает ваше приложение, я использую Framework VB.NET.

в пользовательском удалении действий, которые я делаю:

while (true)
{
   bool createdNew;
   System.Threading.Mutex m = new System.Threading.Mutex(true, "MyMutexNameHere", out createdNew);
   m.Close();
   if (createdNew)
      break;
   MessageBox.Show(null,"Close XXX and click OK to continue uninstall.","Uninstall");
}    
.

сначала я использовал m.releaseMutex () вместо m.close (), которую я обнаружил, было выбрасывать исключение, потому что у меня не было мьютекса.Близко было то, что я должен был использовать, просто чтобы убедиться, что моя копия была закрыта, прежде чем я снова проверил (в противном случае CreateNew никогда не был правдой, если это было неправдами впервые).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top