2013-05-28 234 views
-1

我目前正在爲系統管理員開發一個工具,可用於更新Windows AD的所有客戶端。它需要使用組策略和SMS來進行大規模更新。因此我需要該工具才能生成MSI文件。非安裝MSI文件

是否有可能創建一個MSI文件,但不是而不是安裝任何東西,而是隻做自定義操作(即運行腳本或exe文件)。

順祝商祺雅西蒙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

這是一個可怕的,可怕的反模式。但是,如果你真的要這樣做,你應該使用Quiet Execute Custom Action來包裝你的EXE,這樣標準輸出/錯誤至少可以被捕獲到MSI日誌中。你也不應該強迫錯誤/回滾,因爲坦白地說回滾沒有真正回滾任何東西。微星並不知道你的EXE進程是怎麼做的。相反,你應該有另一個EXE作爲卸載自定義操作。否則,您可以將安裝程序標記爲系統組件,以禁止卸載。 –

+0

或者,您可以禁用PublishProduct標準操作,如果您只是不想將其註冊到系統。但是,如果總是報告一個錯誤,意味着實際上發生了某種回滾,真的會給操作人員帶來錯誤的想法。 –

0

是的,這是可能的。可恥,但可能。

你可以在一個圓形孔中做一個方形釘,但你失去了所有預期的好處。

FWIW,SMS現在稱爲SCCM,它可以調用EXE命令。

+0

可恥?微軟的MSI系統在這裏可恥。與ie相比。區分二進制,源代碼和虛擬軟件包以及通過存儲庫概念進行區分的DEB/APT支持軟件包間依賴性,MSI非常不靈活。 –

+0

是的,可恥的。如果你是這樣的專家,你可以解釋爲什麼。事實上,你甚至不需要問這個問題。 –

+0

如果您告訴我們您的EXE我敢打賭,我可以告訴您如何在不違反最佳做法的情況下在MSI中執行相同的操作。 –