安装后启动,没有UI?

dee*_*hao 17 installer wix

如何在没有UI(或安静模式)的情况下安装后启动我的应用程序?谢谢!


我有一个带UI的安装程序,可以选择在安装后运行.现在我希望我的应用程序通过在安静模式下下载并运行新版本的安装程序来更新自己,但在更新完成后,它将不会再次启动.

Wim*_*nen 15

从关于自定义操作排序的msdn主题:

与标准操作的情况一样,仅当内部用户界面设置为完整级别时,才会在InstallUISequence或AdminUISequence中调度自定义操作.

所以我猜你的自定义操作是按照UI顺序安排的,而不是InstallExecuteSequence.尝试按以下方式安排自定义操作InstallExecuteSequence:

  <InstallExecuteSequence>
     <Custom Action='LaunchApplication' After='InstallFiles'/>
  </InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

其中"LaunchApplication"应替换Id为您的CustomAction元素.

编辑:我查看了您所遵循的说明,但我没有看到以任何顺序启动正在安排的应用程序的自定义操作.它仅从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>
Run Code Online (Sandbox Code Playgroud)