문제

답변은 아마도 포함한 사용자 정의 제거 작업,그러나 그것은 같은 주요 oversite 는 모든 응용 프로그램이 원하는 것,그래서 내가 볼 줄 알았는데 무언가가있는 경우도 없습니다.

나는 몇 가지의 프로젝트에서 만들 Visual Studio2008 년을 사용하여 C#Winform 프로젝트입니다.사용 클릭 한번 설치,그리고 한 사용하여 설정 프로젝트입니다.그들이 모두 떠날 수 있는 응용 프로그램을 실행할 때 제거합니다.Windows7 에서 당신을 얻을 경고하지만,을 남길 수있는 옵션이 그것을 실행하는 어쨌든...에 XP 되지 않습니다.

하게,하지만 모든 생각을 내 프로그램의 파일이 삭제되며 내용은 여전히 왼쪽에 실행,같은 소리 하지 않은 좋은 디자인에서 모두.추억의 GPFs 마음에 와서,또는다.NET 사용하는 지연에 대한 Dll 을도 문제가 될 수 있는 때때 필요로드,그리고 사라졌다.

그래서 거기는 쉽게 허용하지 않는 방법을 제거하는 경우 응용 프로그램은 여전히 실행?

내가 사용하는 C#지만 나를 사용하는 VB.NET 하나의 클래스의 인스턴스를 만들이 확실 내 응용 프로그램 실행 후,그래서 어쩌면 무언가를 활용하는 것을 반대로 만드는 mutex 을 확인하는가?

또한 내용만을 허용하"당 사용자"를 설치,아니다"모든 사용자",그래서 나는 걱정할 필요가 없에 대한 내 응용 프로그램 실행 중에서 또 다른 세션(는 경우에 그것은,그것은 확인을 실행하기 때문에 그것이 있어야 100%자신의 사본).

편집: 이후 나는 아무 것도 찾지 못하는 다른 시도했 mutex 아이디어 및 그것은 작동하지 않습니다.여기에는 나의 코드:

에으로부터 연락이 왔을 때에는 이를 만들라는 mutex 하고 유지하면서 살아 응용 프로그램 실행:

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

        SingleInstanceApplication.Run(TabForm, NewInstanceHandler);

        GC.KeepAlive(m);

에서 제거 작업이 반복될 때까지 그들이 exit(지 않기 때문에 표시하기 쉽게 제공하는 취소 옵션):

            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");
            }

createdNew 는지 설정에서 제거 작업,거의 그것과 같이 실행되는 다른 세션 또는 무언가이다.내가 시도하지 않은 추가 글로벌\mutex 이름은,그러나는 것이 잘 작동하지 않을 내 응용 프로그램에 대한 어쨌든기 때문에 나는 사용자별 설치,그래서 하나의 설치를 유지할 수 있어야에서 실행되는 다른 세션 경우에도 하나가 설치되지 않습니다.

도움이 되었습니까?

해결책

짧은 대답은 쉬운 방법이 없기 때문에이 작업을 수행 할 수있는 뭔가 하지 않는 Microsoft 당신에게 원하는 일입니다.

내 대답했 끝까지 사용하여 mutex,일단 제가 올바른 코드 그것은 잘 작동합니다.

응용 프로그램에서 나는 마:

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

이 SingleInstanceApplication.실행 라인은 무엇을 실행하램을 사용하여 VB.NET framework.

에서 사용자 정의 제거 작업 난:

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()instead of m.Close()는 내가 발견되었 던지는 예외지 않았기 때문에 자신의 mutex.가며 내가 무엇을 해야하는지 확인하기 위해,나의 복사본을 닫기 전에 내가 다시 확인(그렇지 않으면 createNew 결코 진정한 경우,진실하지 않았을 첫번째).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top