2009-04-06 4 views
3

우리는 단지 기본 셸을 설치하고자하는 응용 프로그램을 가지고 있습니다. 사용자가이를 사용함에 따라 필요한 작업에 필요한 dll을 다운로드하고 설치합니다 (가능한 여러 경로가있는 마법사 응용 프로그램 시나리오를 상상해보십시오). 현재 쉘 응용 프로그램을 통해 가능한 모든 경로에 대해 모든 것이 설치됩니다..NET에서 dll을 주문형으로 다운로드하고 설치하는 가장 좋은 방법은 무엇입니까?

연중 약 3 개월 동안 가능한 경로에 사용되는 dll은 업데이트가있는 높은 해지 율을 거치므로 사용자가 이러한 dll의 최신 버전을 갖도록하려는 것입니다. 아이디어는 모든 선택이 이루어진 후에 웹 선택을 통해 선택에 필요한 dll을 확인하고 가장 최신 버전의 파일이 있는지 확인합니다.

이 모든 것을 수행하는 방법에 대한 계획이 있습니다. 내가 싸우고있는 문제는이 파일을 "설치"하는 가장 적절한 방법이다. ClickOnce는 옵션이 아닙니다 ... 너무 많은 유산을 여기에 있습니다. 우리의 응용 프로그램은 "프로그램 파일"에 설치되어 있습니다. Vista에는 프로그램 설치 폴더에 임의의 파일을 쓰는 데 제한이 있습니다.

는 지금은 다음과 같은 옵션을 참조하십시오

  1. 에가 "모두"그룹에 대한 표시를 쓰기로 설치 디렉토리를 설치합니다. 나는 이것이 실제로 작동하는지, 또는 Vista가이 시나리오에서 다른 것을 수행 하는지를보기 위해 실제로 테스트하지 않았다.
  2. 두 번째 앱으로 다운로드 부분을 나눠서 권한 상승을 요청할 수 있으므로이 파일을 다운로드하고 설치할 수 있습니다.

두 번째 옵션은 Program Files 폴더의 보안 측면을 유지하므로 두 번째 옵션으로 기울여야합니다. 그룹의 다른 사람들은 일에 대해 걱정할 필요가 없기 때문에 첫 번째 옵션으로 기대고 있습니다. 아니면 내가 놓친 다른 옵션이 있습니까?

응용 프로그램은 관리되는 어셈블리가 아닌 제 3 자 dll에 대한 몇 가지 요구 사항이 있지만 .NET 응용 프로그램입니다.

답변

1

로드하려는 dll을 관리하는 한이 작업에는 몇 가지 방법이 있습니다.

한 가지 방법은 AppData와 같은 Environment.SpecialFolder 경로를 지정하고 거기에서 appdomain으로 동적으로 어셈블리를로드하는 것입니다. RssBandit 플러그인에는 DLL을로드하고 특정 인터페이스 구현을 검색하고 임시 appdomain에로드 한 다음 앱에서 호출하는 특수 디렉토리가 있습니다. ninject 또는 structuremap과 같은 IoC 라이브러리를 사용하면이 단계를 한 단계 더 수행 할 수 있습니다.

당신은 또한 MEF을 시도 할 수는 C#을 개인적으로 4

1

에 나오는 새로운 확장 성 프레임 워크, 나는 파이어 폭스/XUL 애플 리케이션이 무엇을 좋아합니다. 그것은 당신이 제안한 두 가지 솔루션의 하이브리드입니다. 설치 디렉토리에있는 updater.exe가 있습니다. 나는 그것이 설치하는 동안 설치 디렉토리가 업데이트 응용 프로그램을 실행할 수 있도록 쓰기 가능하게 만든다는 것을 가정합니다. 그러나 이런 방식으로 응용 프로그램을 배포 한 적이없는 나는 두통이 얼마나 많은지 말할 수 없습니다.

언급하지 않았거나 알지 못하는 대안은 .Net 다운로드 캐시를 사용하는 것입니다. 어셈블리를로드하려고하면로드 할 코드 기반을 부여 할 수 있습니다. 코드베이스를 웹 URL (예 : http://mywebhost/mycoolapp/)로 설정하면 .Net은 다운로드 캐시에 해당 URL이없는 경우 해당 URL에서 어셈블리를 다운로드합니다.또한 웹 URL에서 최신 버전의 어셈블리를 가져옵니다.

앱에 승격 된 권한이 필요한 경우 CAS 보안 문제를 해결해야하기 때문에이 방법은 어려울 수 있습니다. 그러나 최신 버전의 어셈블리를 다운로드하는 코드를 작성하지 않아도됩니다. 좀 더 자세한 정보가 필요하면 몇 가지 리소스를 찾아서 더 자세한 예제를 제공 할 수 있습니다.

0

내가 처리하는 방법은 프로그램 파일에 기본 .exe 파일 옆에 update.exe를 설치하는 것입니다.

그런 다음 앱을 시작할 때 웹에서 xml 파일을 다운로드 받아 App Data 폴더에 저장해야합니다. 이 파일에는 dll의 최신 버전이 들어 있으며 간단한 Filename, Version 구조가 있습니다.

파일 이름 목록을 통해 실행하고 dll이 로컬에 없거나 이전 버전 인 경우 필요한 dll을 업데이트 목록에 추가하십시오.

업데이트 목록을 생성 한 후. 업데이트 할 파일의 명령 줄 목록으로 Updater.exe를 실행하십시오. 프로그램 파일에 기록 할 필요는 없습니다. Vista에서는 내 업데이터가 UAC 프롬프트를 올바르게 표시합니다 (프로그램 파일의 보안을 유지해야하므로).

그러면 업데이트 프로그램이 파일을 Program Files에 다운로드하고 기본 응용 프로그램을 다시 시작합니다.

두 번째 앱을 실행하는 데있어 한 가지 문제는 "AsAdministrator"가 설정된 매니페스트를 제공해야한다는 것입니다.

이 작업은 어렵지 않지만 일단 업데이트 프로그램이 완료되고 기본 응용 프로그램을 다시 시작하면 기본 권한으로 기본 응용 프로그램을 시작할 수 없습니다. 관리자로 실행되는 exe는 매니페스트에 "AsInvoker"가 설정되어 있어도 관리자 권한으로 다른 exe를 시작할 수 있습니다. 왜 다시 정상적인 권한으로 제한 할 수 없는지 모르겠지만 어떤 이유에서든 권한을 높일 수는 있습니다 ...

관련 문제