0

Windows 설치 관리자를 사용하여 응용 프로그램을 설치 방법으로 만들려고합니다. 설치가 성공하면 설치 프로그램에서 구성한 기본 출력이있는 경로를 얻고 싶습니다. 내 경우 기본 출력은 [ApplicationData(Installroot)]\Bin\ 폴더에 있습니다.C# 설치 프로젝트 사용자 지정 작업을 사용자 지정 설정 파일에 저장합니다.

또한 설치 위치와 관련된 파일 위치와 같은 여러 설정을 제어하는 ​​1 개의 클래스 라이브러리에 App.Settings라는 사용자 지정 설정 파일이 있습니다.

그래서 설치가 성공하면 App.Settings를 호출하고 설치 폴더를 설정 파일에 저장해야한다는 아이디어가 있습니다.

저는 이미 Install 클래스를 만들어 클래스 라이브러리 안에 넣었습니다. 그래도 그 프로젝트에 있어야 할 지 모르겠다. 이 설치 클래스의 코드입니다 :

using System.Collections; 
using System.ComponentModel; 

namespace WaspbaneModels 
{ 
    [RunInstaller(true)] 
    public partial class Installer : System.Configuration.Install.Installer 
    { 
     public Installer() 
     { 
      InitializeComponent(); 
     } 

     public override void Install(IDictionary stateSaver) 
     { 
      base.Install(stateSaver); 
     } 

     public override void Commit(IDictionary savedState) 
     { 
      base.Commit(savedState); 

      SettingsControl.BaseURL = Context.Parameters["assemblypath"]; 
      SettingsControl.Save(); 
     } 

     public override void Rollback(IDictionary savedState) 
     { 
      base.Rollback(savedState); 
     } 

     public override void Uninstall(IDictionary savedState) 
     { 
      base.Uninstall(savedState); 
     } 
    } 
} 

이 코드 SettingsControl에서 단순히 몇 가지 속성 설정을 담당하는 클래스입니다. 내 Windows Forms 프로젝트에서도 이러한 설정에 액세스 할 수 있도록이 클래스를 사용했습니다.

사용자 지정 작업 탭에서는 모든 항목에 기본 출력을 추가했습니다. 또한 기본 출력에 클래스 라이브러리를 포함한 모든 .dll 파일이 포함되어 있기 때문에 이것이 맞는지 확실하지 않습니다.

설정이 저장되지 않기 때문에이 시점부터 어디서 계속해야할지 모르겠습니다. 응용 프로그램 시작시 메시지 상자를 설정하여 설정 값을 알려 주기만하면됩니다.

프로젝트의 더 많은 데이터에 관심이있는 사람은 누구나 물어보십시오. 나는 아직 모든 것을 한 번에 게시하지 않을 것입니다.

편집 :

좀 더 테스트 후 나는 설치 클래스에 호출되지 않는 것을 알 수 있었다. 메서드를 호출했지만 아무 일도 일어나지 않을 때 파일에 쓰는 것을 추가했습니다.

따라서 내 질문은 다음과 같습니다. 사용자 지정 작업을 설치 프로젝트에 올바르게 추가하려면 어떻게합니까?

답변

1

실행중인 응용 프로그램 컨텍스트가 아니기 때문에 설치 패러다임이 설치 관리자 클래스에서 작동하지 않습니다. 작업 디렉터리 컨텍스트없이 시스템 계정으로 실행되는 msiexec.exe 프로세스에서 리플렉션을 통해 호출됩니다. 사람들은 일반적으로이 문제를 해결하기 위해 설정 파일에서 직접 XML 처리를 사용합니다. 다시 msiexec.exe 프로세스에서 콜백으로 실행 중이므로 설정 파일의 전체 경로를 지정해야합니다.

모든 VS 사용자 지정 작업은 모든 파일이 설치된 후에 실행되므로 사용자 지정 작업은 커스텀 커밋 작업 일 필요는 없습니다. WinSxS의 GAC에 설치되는 파일에 대한 종속성이있는 코드를 실행할 때 커밋 시간 전까지는 액세스 할 수 없기 때문에 커밋 사용자 지정이 필요합니다.

+0

그래서 제대로 된 경우 커밋 후 설정 파일을 찾아 직접 편집 하시겠습니까? – Thodor12

+0

나는 이것에 비틀 거렸다 : http://stackoverflow.com/questions/2943438/visual-studio-2008-installer-custom-action-breakpoint-not-firing. VS2015에서도 마찬가지입니까? 그렇다면 내 코드가 왜 작동하지 않는지 알 수 있습니다. – Thodor12

+0

디버깅과 누락 된 base.Install()을 참조하기 때문에 문제에 따라 관련성이없는 것처럼 보입니다. – PhilDW

1

사용자 지정 작업 클래스 (.dll)를 설치 프로젝트에 추가 할 수 있습니다. 설치 및 커밋 작업에 InstallerActions .dll을 추가해야합니다.

enter image description here

솔루션 탐색기에서 설정 설치 프로젝트를 선택 사용자 지정 작업

  1. 을 추가합니다. 보기 메뉴에서 편집기를 가리킨 다음 사용자 지정 작업을 클릭하십시오. 사용자 지정 작업 편집기가 표시됩니다.
  2. 사용자 지정 작업 편집기에서 커밋 노드를 선택합니다. 동작 메뉴에서 사용자 지정 동작 추가를 클릭합니다.
  3. 프로젝트의 항목 선택 대화 상자에서 응용 프로그램 폴더를 두 번 클릭하십시오. 기본 출력을 InstallerActions 프로젝트에서 선택하십시오. InstallerActions의 기본 출력은 사용자 지정 작업 편집기의 커밋 노드 아래에 표시됩니다.
  4. 속성 창에서 InstallerClass 속성 이 True (기본값)로 설정되어 있는지 확인하십시오.
  5. 사용자 지정 작업에서 편집기는 노드를 설치를 선택하고 노드를 커밋 당신이 그랬던 것처럼이 노드에 InstallerActions에서 기본 출력을 추가 할 수 있습니다.
+0

시간이 지남에 따라 외부 링크가 끊어 질 수 있으므로 답변에 자세한 내용을 제공해야합니다. –