할 수 있습니다.msi 파일을 설치 자체를(아마도 사용자 지정 작업을 통해)?

StackOverflow https://stackoverflow.com/questions/88078

  •  01-07-2019
  •  | 
  •  

문제

내가 지팡이를 구성하는 MSI 에 설치 프로세스,배포와 함께 자체에 포함된 파일 구성 요소,위해야 합.

그래서 프로그램이 Setup.msi 포함 MyApp.exe 고 MyAppBootstrapperEmpty.exe (이 없는 자)에 해당 파일이다.

사용자 실행 MyAppBootstrapperPackaged.exe (을 포함하는 프로그램이 setup.msi 자원으로,인터넷에서 얻은 어딘가에,또는 책임을 지지 않습니다).MyAppBootStrapperPackaged.exe 추출물 프로그램이 setup.msi 임시 폴더를 통해 실행 msiexec.exe.

후에 msiexec.exe 프로세스가 완료되면 내가 원하는 프로그램이 setup.msi MyBootstrapperEmpty.exe (고 MyApp.exe 에십시 프로그램이 setup 폴더 MyApp.exe 안심하실 수 있습 액세스하는 프로그램이 setup.msi 실행 될 때(를 만드는 아래 언급된 패키지 내용).

MyAppBootstrapper*.exe 시도할 수 있습 및 복사 프로그램이 setup.msi 하십시 프로그램이 setup 폴더이지만,필요가 상승이 그렇게 허용하지 않을 것이 자사의 제거를 통해 Windows 에 설치 제거 과정에서(프로그램 추가/제거 또는 그렇지 않으면),는 보존되어야 한다.

물론(나는 생각은 분명하다-내가 잘못입니까?) 나는 포함할 수 없습니다 MSI 파일로 내어/택시(닭고기와 계란을 시나리오),그래서 나는 그것을 믿는 것이 될 수행을 통해 사용자 지정 작업을 하기 전에 설치 과정을 추가,원래 MSI 을 MSI DB 의 미디어/택시와 해당 항목에서 파일 테이블에 있습니다.이것은 할 수 그리고 만약 그렇다면 어떻게?

생각의 컨텐츠 배포 콘텐츠 파일만을 함께 배포합니다.컨텐츠에 의해 생산을 통해 최종 사용자에서 응용 프로그램 실행 시간,그리고 포장으로 배포 EXE 를 포함하는 모두 응용 프로그램과 내용입니다.

프로그램이 setup 설치 관리자를 유지해야 MSI 지만,실행할 수 있습으로퍼 EXE.설치 MyApp.exe 액세스할 수 있어야 합니다 모두 프로그램이 setup..EXE"하라는 것입 조립"을 런타임에서 응용 프로그램에서는 기본(비어 있음)MyAppBootstrapper.exe 도에 의해 설치 MSI,그리고 콘텐츠를 만들어 최종 사용자에 의해.EXE 자원 MSI 동일해야 합로 사용되는 응용 프로그램을 설치하고있다 런타임 포장입니다.

WIX 지 않을 수 있으로 설치 프로그램이 setup.

있을 수 없 종속성 네트워크에서 실행/packaging 간(즉할 수 없는 포장을 통해 웹 서비스-수행되어야 합 로컬).

나는 익숙한(그리고 사용하는)사용자 지정 작업(관리되고 관리되지 않을 통해,DTF 고 그렇지 않으면).

도움이 되었습니까?

해결책

추가 압축하지 않은 중소하다 다음과 같다:

<Media Id='2'/>

를 만든 다음 요소로 파일 요소는 다음과 같다:

<File Source='/path/to/myinstaller.msi' Compressed='no' DiskId='2' />

이 설치 파일을 찾는"myinstaller.msi 에 있는"설치 중간에서 동일한 폴더로 msi 는 것이 설치되고 있습니다.원본 경로 위의 한 지점을 더미 파일,그것은 단지가있을 달래기 위해 wix.

편집:다음 샘플을 테스트입니다.다는 것을 보여 줍 작동합니다.그것은 테스트를 생성.msi 파일을 설치되는 자 c:\program files\테스트입니다.참고로 넣어야 하는 거짓 테스트입니다.msi 파일과 같은 폴더에 텍스트입니다.다 달래기 위해 wix.

<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
   <Product
         Name='ProductName'
         Id='*'
         Language='1033'
         Version='0.0.1'
         Manufacturer='ManufacturerName' >
      <Package
            Keywords='Installer'
            Description='Installer which installs itself'
            Manufacturer='ManufactererName'
            InstallerVersion='100'
            Languages='1033'
            Compressed='yes'
            SummaryCodepage='1252'/>

      <Media Id='1' Cabinet='test.cab' EmbedCab='yes'/> 
      <Media Id='2' /> 

      <Directory Id='TARGETDIR' Name="SourceDir">
         <Directory Id='ProgramFilesFolder'>
            <Directory Id='TestFolder' Name='Test' >
               <Component Id="InstallMyself">
                  <File Source="./test.msi" Compressed="no" DiskId="2" />
               </Component>
            </Directory>
         </Directory>
      </Directory>

      <Feature
            Id='Complete'
            Display='expand'
            Level='1'
            Title='Copy msi file to program files folder'
            Description='Test'>

         <ComponentRef Id="InstallMyself" />
      </Feature>

   </Product>
</Wix>

다른 팁

니다.MSI 패키지를 시작니다.MSI 패키지에서"내에서"자체가 불 중첩된 설치, 며,그것은 나쁜 juju 십시오(규칙 20).윈도우 설치 프로그램 일부 글로벌 데이터는 사용을 관리할 현재 설치하며,그것은 처리하지 않 잘 여러 개 설치를 동시에.같은 이유로,시작하는 경우나 설치하고 다음을 시도하는 또 다른 시작하는 동안 첫 번째는 여전히 진행 중에,당신은 일반적으로 표시하는 팝업의 효과는"다른 설치를 진행할 때까지 기다리십시오 그것은 완료"입니다.

할 수 있는 프로그램,일반적으로퍼(제 생각에는 그 무엇이 당신을 참조)는 자체하지 않는 설치 패키지만, 담고 설치 패키지(등니다.MSI 또는.EXE)는 리소스,아마도 압축된다.의 작퍼 프로그램를 추출/확장 리소스,파일에서 일반적으로는 %TEMP% directory,다음 중 하나를 시작합 추출됩니다.EXE 를 실행하거나 MSIEXEC 에서 추출된다.MSI.니퍼를 포함할 수 있습 여러 개의 자원과 추출물+을 설치하는 하나 그들에게 필요하신 경우에는 설치하기 전에 전제조건 메인 패키지.할 수 있습니다 또는 선박 여러 개의 패키지로 별도의 파일이퍼를 실행/설치에서 직접 유통 미디어를 하나씩,또는 사본들을 대상 기계하고 실행 시리즈의 설치,거기에서는...

WiX 자체 설치되지 않습,no.그것은 도구와 어떤.MSI 패키지를 구축할 수 있습니다.을 소개하고,프로젝트에서트는 일반퍼 프로그램이지만 그것은 아직 구현되지 않았습니다.거기에는 다른 부트스트래퍼용 가능,예를 들어, .

당신이 필요가 없 사용자 지정 작업에 사실을,이후퍼지 않는 자체 Windows Installer 가 설치 패키지"사용자 지정 작업을"아무 의미가 없습니다.고,당신이 충분히 알고 CAs 에 대해 알아 관리/관리되지 않/DTF,당신은 알고를 방지하기에 충분히 사용자 정의 작업 문제를 해결할 수 있습니다.(웃음)

나는 그것에게 훨씬 더 쉽게퍼 추출 MSI 파일을 미리 정의된 위기보다 임시 폴더에 있습니다.예를 들어,C:\Documents and Settings\모든 사용자\Application Data\회사\My 제품 설치하시오.후에 설치가 완료퍼 떠날 것 MSI 파일을 앉아있다.는 경우 어떤 단계에서는 사용자를 결정하는 제품을 다시 설치 윈도우 설치 관리자를 찾을 수있을 것이다 소스 MSI 파일입니다.

또한,경로를 추가하려면 이 파일 RemoveFile 테이블 그래서 그것을 얻는 삭제됩니다.당신이 사용할 수 있는 RemoveFile 요소 에 WiX 니다.

그래서 내가 이해하는 경우,다음을 것 이라고 생각 응용 프로그램을 만들에 변환(MST)가 있는 콘텐츠는 파일을 적용하는 기본 MSI.아직 확신이 들지 않습니다.는 내가 이해해 하지만입니다.:)

나는 구성 MSI 캐시 경로를 알려진 위치에 있습니다.

그런 다음에는 런타임이 필요하신 경우에는"편집"MSI 사용 VBScript 또는 이와 유사한.

하지만 여전히,나는 왜!?!

나도에서 작업하는 방법을 배포하는 여러 MSI 파일이 있습니다.나 bootstrapper.exe 는 프로그램이 뭉치 MSI 파일을 실행하습니다.이 대부분의 경우입니다.

의 경우 해결되지 않은 GPO(글로벌 정책 개체)분포의 설치합니다.GPO 필요 dot-msi 파일을 실행하도록 설치합니다.

이렇게하려면 여기서 무엇을 했는지,거의 문제를 해결(하지만 매우).나는 도 msi 파일을 파일 테이블의 설치 및 내퍼에서는 바이너리 테이블에서 실행할 사용자 지정 작업을 삽입 후 InstallFinalize 에 InstallExecuteSequence.물론퍼지 않을 실행할 수 있는 다른 MSI 기 때문에 최고 수준 MSI 을 보유하고 _MSIExecute mutex.

그것은 아주 쉽게 얻을 조금 더입니다.나는퍼 제어를 반환하고 최고 수준 설치 및 continute.그리고 나는 추가 WaitForSingleObject 전화를 기다려야에 대한 최고 수준의 설치를 완료하고,퍼를 계속할 수 있습을 마무리 설치합니다.

내 문제는 GPO 설치에서 발생하는 부팅 시간과 최고 수준을 설치하기 전에 완료됩 서브 설치를 완료하고 GPO 를 재부팅하는 기계입니다.

최상단 설치 또한 성공을 반환 상태를 설치할 수 있습니다 실제로 실패한다.

I'm still looking for 를 차단하는 방법이 최상위 수준에서 설치를 완료할 때까지 후퍼 완료됩니다.

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