문제

설정 프로젝트에서 ".exe, .dll, .js, .vbs"와 같은 실행 파일은 허용되지만 a를 실행할 방법이 없습니다. .bat 사용자 정의 작업으로 파일.

문제는 어떻게 실행하는지입니다 *.bat 설치 중 파일?

도움이 되었습니까?

해결책

글쎄, 많은 검색과 시행 착오 후 나는 이것을 해결했다. 이것이 가장 좋은 방법인지 확실하지 않지만 작동합니다.

시나리오는 다음과 같습니다. Visual Studio 설정 프로젝트를 통해 배포하려는 응용 프로그램이 있습니다. 내 응용 프로그램 파일 외에도 대상 디렉토리에 배치 (.BAT) 파일이 포함 된 하위 디렉토리를 만들고 싶습니다. 설치 프로세스가 끝날 때이 파일이 실행되기를 원합니다.

당신이하는 일은 다음과 같습니다.

  1. 배치 파일을 배치하는 하위 디렉토리를 포함하여 설정 프로젝트를 작성하고 정상적으로 구성하십시오 (하위 디렉토리에서 원하지 않으면 응용 프로그램 폴더에 직접 배치 할 수 있음).
  2. "파일 시스템"보기에서 (Solution Explorer->보기-> 파일 시스템에서 프로젝트를 마우스 오른쪽 버튼으로 클릭) 실행할 배치 파일을 추가하십시오. 그리고 cmd.exe (c : windows system32 cmd.exe)
  3. "사용자 정의 작업"보기 열기 (Solution Explorer-> View-> 사용자 정의 작업에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오)
  4. "Commit"을 마우스 오른쪽 버튼으로 클릭하고 "사용자 정의 액션 추가"를 선택하십시오.
  5. CMD.exe를 탐색하고 선택하십시오.
  6. 새로 생성 된 사용자 정의 액션을 위해 Properties 패널을 엽니 다.
  7. 인수 속성에서 삭제 /커밋.
  8. 입력하다: /c "[TARGETDIR]subdirectoryname\batchfile.bat" 서브 디렉토리 이름을 하위 디렉토리의 이름으로 바꿔야하는 인수 속성에서 (배치 파일을 내가 한 것처럼 하위 디렉토리에 넣는 경우 ... 값이 값이되어야합니다. /c "[TARGETDIR]batchfile.bat") 및 batchfile.bat은 배치 파일의 파일 이름이어야합니다.

그게 다야. 나머지 설치 프로세스가 완료되면 배치 파일이 실행됩니다.

다음은 명확성을위한 예입니다.

내 배치 파일 : blah.bat
내 하위 디렉토리 : Mydir

CMD.exe를 타겟팅하는 내 사용자 지정 조치에 대한 인수의 가치는 다음과 같습니다.

/c "[TARGETDIR]mydir\blah.bat"

그것이 누군가를 돕기를 바랍니다!

다른 팁

  1. VB.NET에도 C#에도 적용되는이 기사 (기사가 더 이상 사용되지 않음)를 확인하십시오. 가장 중요한 부분은 새 클래스 라이브러리를 만드는 (C#로 번역) 및 다음 컨텐츠와 함께 새로운 설치 프로그램 클래스를 추가하는 것입니다. 기사에 명시된대로 방금 생성 된 프로젝트를 참조하여 새로운 사용자 정의 작업을 만들 수 있습니다.

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. 이제 설치 프로그램 프로젝트에 배치 파일을 추가하고 있습니다. 배치 파일을 배치하는 하위 디렉토리를 포함하여 설정 프로젝트를 작성하고 정상적으로 구성하십시오 (하위 디렉토리에서 원하지 않으면 응용 프로그램 폴더에 직접 배치 할 수 있음).

  3. "파일 시스템"보기에서 (Solution Explorer-> View-> 파일 시스템에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오) 실행하려는 배치 파일을 추가하십시오.

  4. 설치 프로그램 프로젝트를 구축하십시오.

동일한 결과에 도달하는 또 다른 방법은 특파원 .BAT 파일을 실행하는 사용자 지정 조치에 .VBS 파일을 넣는 것입니다. 다음 코드는 설정 애플리케이션 폴더에 넣은 "runregistercomponents.vbs"입니다. 물론 Visual Studio 속성 창에 [TargetDir]를 .VBS 매개 변수로 넣습니다.

dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir=  property("CustomActionData")

' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)

' Set the current directory
WshShell.CurrentDirectory = programDir

' Run batch.
ret = WshShell.Run (commandString, 0, 0)

그것은 내가 사용자 정의 작업을 설정하는 것입니다.

enter image description here

이것이 당신을 도울 수 있기를 바랍니다!

설치 프로세스 중에 상대 경로가있는 배치 파일을 실행하려는 경우 확실히 실패합니다. 배치 파일이 설치 프로그램이 실행중인 디렉토리를 고려하고 파일이 설치된 곳이 아니기 때문입니다. 배치 파일을 임시 디렉토리로 복사하는 설치 프로그램 빌더를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top