2013-05-28 3 views
-1

현재 Windows AD의 모든 클라이언트를 업데이트하는 데 사용할 수있는 시스템 관리자를위한 도구로 작업하고 있습니다. 대량 업데이트를 위해 그룹 정책 및 SMS와 협력해야합니다. 따라서 MSI 파일을 생성하려면 도구가 필요합니다.비 설치 MSI 파일

이 아닌을 설치하는 대신 사용자 지정 작업 (예 : 스크립트 또는 exe 파일 실행)을 수행하는 MSI 파일을 만들 수 있습니까?

최고 감사장 Jakob Simon-Gaarde

답변

-1

내 문제를 해결하기 위해 hackish 방법을 찾았

이 인터넷 서비스를 호출에 따라 일부 구성 물건을 수행하고 나서 오류를 강제하기 때문에 설치를 롤백 내 실행 파일을 실행하는 작업을 수행
<?xml version='1.0' encoding='windows-1252'?> 
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> 
    <Product 
     Name='MVLicense Updater' Id='f8fc0a30-c138-1fe2-838b-0845200c9a66' 
     UpgradeCode='00ca86a0-c889-12e2-8f8b-0800200c9a66' 
     Language='1033' Version='1.0.0.0' Manufacturer='My Company'> 

     <Package Id='*' InstallerVersion='200' Compressed='yes' /> 

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

     <Directory Id='TARGETDIR' Name='SourceDir'> 
      <Directory Id='ProgramFilesFolder'> 
       <Directory Id='INSTALLDIR' Name='My-Updater'> 
        <Component Id='Readme' Guid='68fef080-c87b-34e2-8889-0824200c9a66'> 
         <File Id='ReadmeTXT' Name='readme.txt' Source='readme.txt' Vital='no' /> 
         <RemoveFolder Id="INSTALLDIR" On="uninstall" /> 
        </Component> 
       </Directory> 
      </Directory> 
     </Directory> 

     <Feature Id='Complete' Level="1"> 
      <ComponentRef Id='Readme' /> 
     </Feature> 

     <CustomAction Id="ForceError" Error="1602"/> 
     <CustomAction Id="RunMyUpdater" BinaryKey="MyUpdaterExe" ExeCommand="dummy" Return="check"/> 

     <InstallExecuteSequence> 
      <Custom Action='RunMyUpdater' After='InstallInitialize'></Custom> 
      <Custom Action="ForceError" After="RunMvlupdate"></Custom> 
     </InstallExecuteSequence> 

     <AdminExecuteSequence> 
      <Custom Action='RunMyUpdater' After='InstallInitialize'></Custom> 
      <Custom Action="ForceError" After="RunMyUpdate"></Custom> 
     </AdminExecuteSequence> 

     <Binary Id="MyUpdaterExe" SourceFile="dist\myupdater.exe" /> 
     <UI> 
      <Error Id="1602">We have a problem</Error> 
     </UI> 
    </Product> 
</Wix> 

발생한다.

+0

이것은 끔찍하고 끔찍한 반 패턴입니다. 그러나 실제로 수행하려는 경우 EXE를 자동 실행 사용자 지정 동작으로 래핑하여 표준 출력/오류를 적어도 MSI 로그에 캡처 할 수 있도록해야합니다. 솔직히 롤백이 실제로 아무것도 롤백하지 않기 때문에 또한 오류/롤백을 강제해서는 안됩니다. MSI는 귀하의 out of process EXE가 무엇인지 전혀 모릅니다. 대신 제거 사용자 지정 작업으로 작동하는 다른 EXE가 있어야합니다. 그렇지 않으면 설치 프로그램을 시스템 구성 요소로 표시하여 설치 제거를 허용하지 않을 수 있습니다. –

+0

또는 시스템에 등록하지 않으려면 PublishProduct 표준 작업을 비활성화 할 수 있습니다. 그러나 실제로 어떤 일이 실제로 발생했을 때 롤백이 발생했다는 암시로 오류를보고하면 작업 담당자에게 잘못된 생각이 생깁니다. –

0

예, 가능합니다. 부끄럽지만, 가능합니다.

원형 구멍에 정사각형 못을 끼울 수는 있지만 의도 한 모든 이점을 잃게됩니다.

FWIW에서 SMS는 이제 SCCM이라고하며 EXE 명령을 호출 할 수 있습니다.

+0

부끄러운가? 여기서 부끄러운 점은 MS의 MSI 시스템입니다. ie와 비교된다. 바이너리, 소스 및 가상 패키지를 구별하고 저장소 개념을 통해 패키지 간 종속성을 지원하는 DEB/APT는 MSI가 너무 융통성이 없습니다. –

+0

예, 수치 스럽습니다. 당신이 그런 전문가라면, 당신은 이유를 설명 할 수 있습니다. 사실, 당신은 질문하지 않아도됩니다. –

+0

EXE가 무엇인지 알려 주시면 모범 사례를 위반하지 않고 MSI에서 동일한 작업을 수행하는 방법을 알려 드릴 수 있습니다. –