2010-04-30 6 views
5

MSI를 생성하는 설치 프로그램 프로젝트가있는 .NET 솔루션이 있습니다. MSI가 설치 한 프로젝트 중 하나에는 App.Config 파일이 들어 있습니다. 해당 설정 파일의 값은 컴파일시 MSI에 임베드 된 것으로 보입니다. 런타임에 을 무시하는 방법이 있습니까??MSI에 포함 된 app.config 설정을 재정의 하시겠습니까?

예를 들어, 함께 일하고있는 App.Config는 설치 프로그램이 말하는 웹 서비스의 URL을 설정합니다. 런타임시이 URL을 재정 의하여 가능합니까? URL이 변경된 경우 MSI를 다시 컴파일 할 필요가 없습니까?

업데이트

:은 내가, IS 부탁 해요 내가 런타임에, 그것은 우선합니다 있도록 내 설치 디렉토리에 특정 이름 더불어, app.config 파일을 복사 할 수있는 생각, 설정은 MSI에 포함 ?

레지스트리 또는 잘 알려진 텍스트 파일 위치와 같은 다른 위치에서 재정의를 확인하기 위해 코드를 다시 디자인 할 수는 있지만 재빨리 필요하지 않으면이 문제를 다시 컴파일해야합니다. (많은 수의 설치 디스크가 사용자의 손에 있음)

답변

1

현재 작업하고있는 응용 프로그램을 개발할 때 비슷한 문제가있었습니다. 다른 컴퓨터 나 구성 유틸리티에서 이식 된 설정을 사용하여 처음으로 새로 설치를 시작할 수 있기를 원했습니다. 나는 솔직히 우리의 해결책이 대대적 인 계획에 얼마나 좋은지 모르지만, 지금 당장 우리를 위해 일하고있는 것을 말할 수 있습니다.

이 경우 대부분의 설정은 app.config 파일에서 끝나기 때문에 응용 프로그램 외부에서 시도하고 조작하지 않는 것이 좋습니다. 그것은 할 수 있지만 여러 가지 미묘한 방법으로 위험합니다. 그렇지 않은 경우에는 파일, 데이터베이스 또는 설정을 저장하기 위해 사용했던 모든 데이터에 데이터를 주입하는 설치 프로젝트에 "사용자 지정 동작"을 추가하는 것이 가장 좋습니다. 이를 수행하는 출발점은 in MSDN입니다.

하지만 옵션이 아니기 때문에 설치 패키지를 설치 패키지에 넣지 않고 앱을 통해 데이터를 가져 오는 가장 간단한 방법은 '타고 다니기'파일을 사용하는 것입니다. 이 파일은 설치가 알고 있지만 .MSI로 빌드되지 않은 파일입니다. 설치할 때 .MSI와 관련된 알려진 위치에 있어야합니다. 설치 프로젝트에서 해당 파일의 위치, 위치 및 위치를 알려줍니다. 그런 다음 응용 프로그램은 시작시 해당 프로그램의 존재 유무를 확인하고 발견 된 프로그램을 처리 할 수 ​​있습니다. 귀하의 경우이 URL 설정 무시됩니다. 그런 다음 앱에서 파일을 삭제할 수 있으므로 시작할 때마다로드되지 않습니다.

설치 프로젝트에서 VS 설치 프로젝트가 생성하는 패키지 스타일과 제대로 작동하도록 파일을 설정해야합니다.이것들을 설정했는지 확인하십시오. 필요하지 않기 때문에 타고있는 파일을 제외 할 때 오류나 기타 이상한 동작이 발생할 수 있습니다.

  • 상태 :
  • PacakgeAs를 다시 설치는 :

거짓 우리는 우리의 파일 AutoImport.Settings.xml 전화 : 중요한

  • 가 vsdpaLoose. 이것은 사용자 정의 XML 파일로, 앱을 설치할 때 초기화 할 수있는 모든 데이터를 저장합니다. 런타임에 응용 프로그램에서 구성을 수동으로 내보내거나 가져올 때 사용하는 것과 동일한 형식을 따르며 동일한 메커니즘을 사용합니다. 파일을 찾으면 자동으로 시작됩니다. 이렇게하면 우리가 원하는 모든 네트워크 관련 설정으로 하나의 "프로토 타입"컴퓨터를 구성하고 해당 설정을 내 보낸 다음 해당 네트워크 환경에서 수행하는 다른 설치와 함께 자동 로딩을 위해 가져 오기 파일을 보낼 수 있습니다.

    내가 말했듯이 "더 나은"방법이 있어야한다고 느낍니다. 우리가 생각해 낼 수 있었던 유일한 점은 app.config와 user.config 메카니즘을 벗어나는 것을 의미합니다. 결국 우리는 이것이 우리의 필요를 완전히 충족시킨 가장 마찰력있는 대안이라고 결론 내렸다.

  • +0

    제안 해 주셔서 감사합니다. 이 응용 프로그램은 CD를 통해 설치되므로 타고 다니는 파일을 추가하거나 수정하는 것이 어려울 수 있으므로 필자의 요구에 가장 잘 맞는 것은 설치 코드를 수정하여 잘 알려진 레지스트리 키를 기본값으로 확인하는 것입니다. 나의 주요 목표는 MSI가 특정 파일 이름의 ride-along 파일을 자동으로 찾는 지 알아내는 것이었고 "네가 너 자신을 굴려 라."라고 말하는 것처럼 들린다. 그럼에도 불구하고 대답은 원했지만 대답은 아닙니다. :) –

    0

    설치 프로그램이 웹 서비스와 대화해야하는 경우 설치 프로그램 자체가 아니라면 URL을 어디에 저장할 것입니까?

    URL ("상수"URL, 데이터베이스, 파일 공유 등)을 찾을 수있는 곳을 잘 알고 있다면 해당 주소를 설치 프로그램에 포함시킬 수 있습니다. 그렇지 않으면 URL을 가져올 수있는 곳이 없습니다 ...

    0

    공개 속성으로 URL을 노출하는 경우 (즉, Proeprties 테이블의 모든 대문자 인 속성은 공개로 간주됩니다. VS에서 설치 프로젝트에서이 수준의 제어권을 가짐), MSI를 실행할 때 명령 줄에서 설정할 수 있습니다. 이것은 특정 문제에 대한 장기적인 해결책이 아닙니다. 변경되지 않는 알려진 주소에 대한 초기 연결을 만드는 것이 더 좋을 수도 있고 원하는 실제 웹 서비스의 현재 주소를 반환 할 수도 있습니다 말을해라.

    +0

    해당 URL은 "변경 예정이없는 알려진 주소"입니다. 설치 프로그램이 다른 구성 데이터를 다운로드하는 곳입니다. 문제는이 URL이 결국 바뀌 었다는 것입니다. :) –

    +0

    그런 다음 글 머리 기호를 물어야하는 시점에있을 수 있으며 MSI를 다시 빌드해야합니다 (호스팅 서버에서 자동 리디렉션을 수행 할 수 없다고 가정). 원래 웹 서비스). – slugster

    관련 문제