4

사용자 지정 동작이 작동하지 않는 것 같습니다. 내가 잘못하고있는 것 같아. 여기에 내가 뭘하려고하는지 :Visual Studio 2008 Installer 프로젝트 - 사용자 지정 작업이 실행되지 않음

실행 파일을 실행하는 내 응용 프로그램 설치 (Visual Studio Installer 프로젝트)에서 사용자 지정 작업을 실행하고 싶습니다. 실행 파일은 단순히 일부 system.io 파일 복사 작업을 수행하며, 실행 파일 자체가 완벽하게 작동 할 때 실행 파일임을 확인했습니다.

  1. 나는
  2. 는 사용자 지정 작업에 갔다 응용 프로그램 폴더에 EXE 파일 추가 설치 프로젝트를 생성하고
  3. InstallerClass 사실
  4. 로 설정 단계 커밋에 EXE 파일을 추가 설치 프로그램을 실행 , 내가 원하는 결과를 얻지 못했습니다. 그래서 Windows 로그에 기록 할 줄을 추가했습니다. 설치 프로그램을 다시 실행 한 후 Windows 로그에서 찾았습니다. 실행되지 않은 것처럼 보입니다. debug.break를 exe 코드에 추가했습니다 Unisntalled/다시 설치 한 설치 프로그램과 아무 일도 없었습니다. 나는 마침내 앉아서 프로세스를 보았고 exe가 결코 실행되지 않는다는 것을 확인했다.

의견이 있으십니까?

대상으로 체제 : Windows XP, 비스타 비주얼 스튜디오 버전 : 2008 SP1 언어 : VB.NET 프레임 워크 대상 : 2.0


우수한. 내가 게시 한 코드 덕택에 좀 더 가까워지고 있다고 생각합니다. VB로 변환하고이 오류가 발생합니다 : myexename.savedstate를 찾을 수 없습니다. 내가 게시 한 잠수함에 뭔가를 전달해야한다고 가정하지만, 나는 무엇을 모릅니다.

 

Imports System.ComponentModel 
Imports System.Configuration.Install 

_ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Want_To_Run() 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 
     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 

내가 그 전화를하지 않았다 : 여기 (그런데이 콘솔 응용 프로그램입니다) 나는 System.Configuration.Install.dll에 대한 참조를 추가하는 것은 내 코드입니다. 전에 Installer 클래스를 사용한 적이 없습니다. 나는 신인 무언가를 여기에서하고 있을지도 모른다. 귀하의 지침에 따라, 내가 설치하는 동안 실행하려는 exe 아래에 붙여 넣은 코드를 추가했습니다. exe를 내 응용 프로그램 폴더에 추가 한 다음 커밋 사용자 지정 작업에 추가했습니다.

 
    _ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Have_my_codein() 
      MyBase.Commit(savedState) 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 

     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 
 

흠 ... exe 인의 프로젝트 속성에서 내가 클릭을 "로그인 : 지금 여기에 내가 지금은 실행하기 위해 노력하고있어 내 EXE 파일의 소스에있는 코드 어셈블리 "오류가 사라졌습니다. 그러나 exe가 원하는 코드를 실행하지 않는 것처럼 보입니다.

+0

Visual Studio 배포 프로젝트가 빠르며 의심 할 여지없이 문제가 발생할 것입니다. 대신 WiX를 사용하십시오. – erikkallen

답변

8

당신은 다음과 같이 RunInstaller 속성 Installer에서 클래스의 유도를 포함하고 표시해야 커밋 단계에 추가 된 EXE 또는 라이브러리 :이 도움이

[RunInstaller(true)] 
public class ApplicationInstaller : Installer 
{ 
    public override void Commit(IDictionary savedState) { 
     // Do some work on commit 
    } 
    public override void Install(IDictionary stateSaver) { 
     // Do some work on install 
    } 
    public override void Uninstall(IDictionary savedState) { 
     // Do some work on uninstall 
    } 
} 

희망.

+1

[RunInstaller (true)]는 매우 중요합니다. – Amitd

2

기본 방법을 사용 하시겠습니까?

public override void Commit(IDictionary savedState) { 
    // Do some work on commit 
    base.Commit(savedState); 
} 
0

속성을 'false'로 설정하십시오.

관련 문제