2011-02-22 2 views
2

일부 사용자 지정 동작을 처리하기 위해 System.Configuration.Install.Installer 클래스를 사용하는 설치 프로젝트가 있습니다. Uninstall 메서드의 내 논리는 실제로 아무것도 제거하지 않고 제거가 종료되는 예외 (null 참조 예외)를 던지고있었습니다.제거하는 동안 예외를 throw하는 설치를 어떻게 제거합니까?

나는이 문제의 원인을 알고 Uninstall 메서드의 코드를 변경했으나 제어판을 통해 프로그램을 제거하려고하면 변경하지 않기 때문에 문제가되지 않습니다. 예외를 계속하고 VS2010의 설치 프로젝트 컨텍스트 메뉴를 통해 제거하려고하면 다시 빌드 된 설치 프로젝트를 사용하지 않는 것으로 보이며 제어판을 통해 제거하려고하는 것과 같은 일을합니다.

나는 바위와 어려운 곳 사이에 붙잡힌 것 같은 기분입니다. 다른 사람이이 상황에 빠졌습니까? 만약 그렇다면 어떻게 그 일을 회피합니까?

답변

2

This Question 내 질문에 완벽하게 답변했습니다.

기본적으로 방금 Uninstall 메서드에서 System.Configuration.Install.Installer dll 파일을 논리없이 다시 컴파일했습니다. 수동으로 프로그램의 설치 위치에있는 dll을 새로 컴파일 된 DLL로 바꾼 다음 프로그램을 다시 제거하려고했습니다. 설치 제거 프로그램은 새 dll 파일을 사용하고 예외를 throw하지 않습니다 (해당 메소드에서 모든 코드를 제거했기 때문에).

그런 다음 내 코드를 수정하고 새로운 설치 프로그램을 만들 수있었습니다.

방금 ​​경우에 따라 나는 내 모든 제거 논리를 try 블록으로 던졌고 Exception을 잡았습니다. 문제는 논쟁의 여지가 있지만 적어도 제거 방법을 변경하는 방법에 대한 변경 사항을 유지합니다. 저의 구성 파일이 제대로 정리되지 않았을 수도 있습니다.)

+0

어디서나 문제의 해결책을 알고 자하는 사람들의 이익을 위해서만 내 자신의 질문에 대답하십시오. – Anthony

0

할 수 있습니다 (당신이 실제 MSI 경로를 사용)이 명령을 사용하여 고정 MSI를 다시 캐시하려고 :

msiexec.exe /fv <path_to_new_msi> 

또한 윈도우 SDK에서 Msizap.exe를을 사용하여 시도 할 수 있습니다 :

http://msdn.microsoft.com/en-us/library/aa370523(VS.85).aspx

관련 문제