2013-05-28 3 views
-1

В настоящее время я работаю над инструментом для системных администраторов, который может быть использован для обновления всех клиентов Windows AD. Он должен работать с групповой политикой и СМС для массового обновления. Поэтому мне нужен инструмент для вывода MSI-файла.Не устанавливаемый файл MSI

Возможно ли создать файл MSI, который делает , а не установить что-либо, но вместо этого выполняет только пользовательское действие (т.е. запускает скрипт или exe-файл).

С наилучшими пожеланиями Jakob Simon-Gaarde

ответ

-1

Найденный хаком способ решить мою проблему:

<?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 с помощью Quiet Execute Custom Action, чтобы стандартный вывод/ошибка, по крайней мере, можно было записать в журнал MSI. Также вы не должны принуждать к ошибке/откату, потому что, откровенно говоря, откаты действительно не отбрасывают что-либо. MSI не имеет представления о том, что сделал вне процесса EXE. Вместо этого у вас должен быть другой EXE, который будет действовать как удаленное пользовательское действие. В противном случае вы можете пометить установщик как системный компонент, чтобы запретить удаление. –

+0

В качестве альтернативы вы можете отключить стандартное действие PublishProduct, если вы просто не хотите, чтобы он был зарегистрирован в системе. Но всегда сообщать об ошибке, поскольку подразумевается, что откат произошел, когда на самом деле что-то произошло, действительно дает операциям неправильную идею. –

0

Да, это возможно. Позорно, но, возможно.

Вы можете сделать квадратную привязку в круглом отверстии, но вы потеряете все намеченные преимущества.

FWIW, SMS теперь называется SCCM, и он может вызывать команды EXE.

+0

Позорный? Что постыдно здесь Microsoft MSI-системы. По сравнению с т. DEB/APT, которые различают бинарный, исходный и виртуальный пакеты и через концепцию репозитория, поддерживают зависимости между пакетами, MSI настолько негибкая. –

+0

Да, стыдно. Если вы такой специалист, вы можете объяснить, почему. На самом деле вам даже не придется задавать вопрос. –

+0

Если вы сообщите нам, что делает ваш EXE, я уверен, вы могли бы рассказать вам, как делать то же самое в MSI, не нарушая лучших практик. –

 Смежные вопросы

  • Нет связанных вопросов^_^