2009-12-09 65 views
16

如何在沒有UI(或安靜模式)的情況下安裝後啓動我的應用程序?謝謝!安裝後啓動,沒有UI?


我有一個UI安裝程序,它有安裝後運行的選項。現在我希望我的應用程序通過以安靜模式下載並運行新版本的安裝程序來更新自身,但更新完成後,它不會再次啓動。

+0

注意:我正在使用名爲LAUNCHAPPONEXIT的屬性來控制啓動我的應用程序的自定義操作。並且其默認值爲1. – deerchao 2009-12-09 06:15:49

+0

以下是我在安裝後用於啓動的方法:http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/ – deerchao 2009-12-09 07:00:41

回答

15

從MSDN主題上sequencing custom actions

作爲標準操作的情況下,被安排在 的InstallUISequence或 AdminUISequence運行僅在 內部用戶接口被設置爲 自定義操作 完整級別。

所以我想你的自定義動作是按照UI順序安排的,而不是在InstallExecuteSequence。儘量安排您的自定義操作在InstallExecuteSequence這樣的:

<InstallExecuteSequence> 
    <Custom Action='LaunchApplication' After='InstallFiles'/> 
    </InstallExecuteSequence> 

其中「LaunchApplication」應該由你的CustomAction元素的Id取代。

編輯:我看着你跟着instructions,我沒有看到啓動被調度以任何順序應用程序的自定義操作。它只能通過UI操作觸發(單擊完成按鈕)。這解釋了爲什麼它在靜默安裝過程中從不執行。

編輯:全樣本(這是一個有點草率,因爲它也試圖執行上卸載,修復等自定義操作,但由於某種原因,我無法得到的「未安裝」狀態工作)

<?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='Launch application demo' 
      Manufacturer='ManufactererName' 
      InstallerVersion='100' 
      Languages='1033' 
      Compressed='yes' 
      SummaryCodepage='1252'/> 

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

     <Directory Id='TARGETDIR' Name="SourceDir"> 
     <Directory Id='ProgramFilesFolder'> 
      <Directory Id='TestFolder' Name='Test' > 
       <Component Id="ExeComponent" Guid="*"> 
        <File Id="ExeFile" Source="c:\windows\notepad.exe" /> 
       </Component> 
      </Directory> 
     </Directory> 
     </Directory> 

     <Feature Id='Complete' 
      Display='expand' 
      Level='1' 
      Title='Test' 
      Description='Test'> 
     <ComponentRef Id="ExeComponent" /> 
     </Feature> 

     <InstallExecuteSequence> 
     <Custom Action='LaunchInstalledExe' After='InstallFinalize'/> 
     </InstallExecuteSequence> 

     <CustomAction Id="LaunchInstalledExe" 
     FileKey="ExeFile" 
     ExeCommand="" 
     Execute="immediate" 
     Impersonate="yes" 
     Return="asyncNoWait" /> 

    </Product> 
</Wix> 
+0

我試過: LAUNCH_APP_ON_EXIT 看來我不能使它工作,有或沒有UI,即使我拿出條件LAUNCH_APP_ON_EXIT。你能提供一個簡單的例子嗎? 謝謝! – deerchao 2009-12-12 00:51:29

+0

感謝你的例子。我添加了一個屬性UPDATING_AUTOMATICALLY來控制是否運行自定義操作。 – deerchao 2009-12-12 08:03:40

+0

然後我在命令行中傳遞UPDATING_AUTOMATICALLY = 1。 – deerchao 2009-12-12 08:04:11

1

我會假設你從自定義操作啓動你的應用程序,這是通過綁定到複選框的屬性觸發的。如果是這種情況,您可以嘗試將該屬性指定爲setup.exe的命令行參數。也就是說,如果您的自定義操作綁定到MSI屬性LAUNCH_NEW_VERSION,你可以調用SETUP.EXE這樣的:

setup.exe /q LAUNCH_NEW_VERSION=1 

標準設置引導程序應該是屬性/值傳遞給MSI引擎。如果沒有,你可以考慮直接調用.msi而不是調用bootstrapper exe來運行你的安裝程序。

+0

是的,我正在使用名爲LAUNCHAPPONEXIT的屬性來控制自定義操作,並且其默認值設置爲1.但是程序不會以任何方式在安靜模式下啓動。我試過 setup.exe/q LAUNCHAPPONEXIT = 1 它也不起作用。 – deerchao 2009-12-09 06:11:59

+0

嘗試直接通過.msi而不是setup.exe引導程序。 – 2009-12-09 07:25:03

+0

我試了好幾次都沒有運氣: 「msiexec/i DepotM.Setup.msi/qn LAUNCHAPPONEXIT = 1」 但是,如果我更改爲/ qf(顯示完整的UI),它會在安裝後運行。/qb也沒有工作。 – deerchao 2009-12-09 07:49:28

3

以我最終溶液I中使用的兩個屬性,一個用於UI(LAUNCH_APP_ON_EXIT),一個用於命令行參數(UPDATING_AUTOMATICALLY)。

我,如果我後運行CustomAction InstallFinalize完全UI模式,這樣做是因爲,你點擊「完成」按鈕之前的應用程序將啓動。

現在我可以撥打setup.exe/qn UPDATING_AUTOMATICALLY = 1在我的程序中進行更新。

下面是這一切:

<Property Id="LAUNCH_APP_ON_EXIT" Value="1" /> 
<Property Id="UPDATING_AUTOMATICALLY" Value ="0" /> 

<CustomAction Id="LaunchApplication" FileKey="mainExecutableFile" ExeCommand="" Execute="immediate" Impersonate="yes" Return="asyncNoWait" /> 

<UI> 
    <!-- explainations: http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/ --> 
    <UIRef Id="MyWixUI_InstallDir" /> 
    <UIRef Id="WixUI_ErrorProgressText"/> 

    <Publish Dialog="MyExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">LAUNCH_APP_ON_EXIT</Publish> 
</UI> 

<InstallExecuteSequence> 
    <Custom Action='LaunchApplication' After='InstallFinalize'>UPDATING_AUTOMATICALLY = 1</Custom> 
</InstallExecuteSequence> 
+0

這非常有幫助。在我的情況下,我想使用標準UI複選框來啓動程序*如果* UI顯示...但是如果安裝程序默默運行,我想自動啓動它。將UPDATING_AUTOMATICALLY屬性添加到部分至關重要。謝謝! – stuzor 2017-01-22 23:20:56

1

這是我採取的方法。

<Property Id="WixShellExecTarget" Value="[#(the id of your exe here)]" /> 
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 

這將執行您在Value中輸入的任何文件ID。 [#]是必需的。我使用它並通過UI運行它,但你應該能夠在任何地方調用這個自定義動作,並且它可以工作。