0

Visual Studio 설치 프로젝트를 개발 중입니다. 지금까지 제거를 제외하고 모두 잘되었습니다. 프로그램이 자체 제거 프로그램을 만들지 않았지만 대신 제거 프로그램이 setup.msi 내에 있습니다. 그래서 내가해야 할 일은 설치하는 동안 실행중인 setup.msi를 [TARGETDIR]에 복사해야합니다. 내가 생각할 수있는 가장 쉬운 방법은 사용자 지정 작업을 사용하는 것입니다. 나는 커스텀 액션에서 꽤 잃어 버렸지 만, 나는 그들이 어디로 가고, 코드를 만들 때마다 에러가 가득 찼는 지 이해하지 못한다. 다른 질문과 답변을 살펴보면 다음과 같이 생각해 봤습니다.Visual Studio 설치, 사용자 지정 작업을 사용하여 설치 파일 복사

[RunInstaller(true)] 
public partial class CustomInstaller : System.Configuration.Install.Installer 
{ 
    public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 
     string path = this.Context.Parameters["targetdir"]; 
     // Do something with path. 
    } 
} 

나는 그것을 이해하지 못합니다. customactiondata를 통해 전달되는대로 targetdir을 얻는 방법을 봅니다. 그러나 RunInstaller는 알려져 있지 않으며 System.COnfiguration.Install.Installer도 아닙니다. 이 .cs 파일을 저장하려면 어떻게해야합니까? 매우 혼란.

답변

1

이 수업은 신청 프로젝트에 포함되어야합니다. DLL이 설치 프로젝트에 의해 패키지화 된 모든 프로젝트에 포함될 수 있다고 생각하지만 일반적으로이를 응용 프로그램 프로젝트에 넣는 것이 가장 좋습니다.

응용 프로그램 프로젝트가 System.Configuration.Install.dll을 참조하는지 확인하십시오. 그러면 Installer 참조가 해결됩니다.

RunInstallerSystem.ComponentModel 네임 스페이스 (System.dll)에 있으므로 클래스 파일 맨 위에 using System.ComponentModel 문을 사용해야합니다.

이 질문은 사용자 정의 작업을 더 이해하는 데 도움이 될 수

Why won't my Setup Project Perform my Custom Registration Process

+0

좋습니다. 잠깐, .cs 파일을 추가 할 수는 없습니다. 대신 vbs로 작성해야합니까? – Kyle

+0

프로젝트가 VB이고 C#이 아니고 예이면 VB로 작성할 수 있습니다. 프로젝트에 항목을 추가 할 때 Installer 클래스 템플리트가 있어야합니다. 이것은 당신이 시작하는 데 도움이됩니다. – Keith

+0

내 프로젝트는 C#입니다. – Kyle

1

이가 시작하는 데 도움이 될 수 있습니다, 그것은 설치 클래스를 포함하지 않지만.

https://www.simple-talk.com/dotnet/visual-studio/getting-started-with-setup-projects/

오류 2835는 대화, 아마 오류 대화 상자를 보여 주려에 관한 가짜 오류입니다, 그래서 가장 가능성이, 어떤이 잘못된 코드를 마스킹합니다.

가에 msiexec/I/L * v를 사용하여 로그를 확인하고 당신은 인수 목록과 같은 사용자 정의 액션에 그 TARGETDIR 값을 전달하는 2835.

하기 전에 오류를 찾아, 그래서 당신은 말할 것/TARGETDIR = "[TARGETDIR] \"이며 대소 문자를 구분하며 대괄호를 포함합니다. 다른 논쟁과 합병되기 때문에 까다 롭습니다.

코드가 응용 프로그램 컨텍스트에서 실행되지 않도록주의하십시오. 이것은 시스템 계정과 sysetm32의 작업 디렉토리로 실행되는 msiexec 프로세스의 호출입니다. 즉, 전체 경로를 지정해야하며 프로필 관련 항목 (예 : 데스크톱, 사용자 프로필 위치)을 사용하면 실패합니다.

관련 문제