Запуск приложения по завершении установки не работает в пользовательском режиме - PullRequest
1 голос
/ 04 июня 2019

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

При установке на всю машину (режим администратора) приложение запускается, как и ожидалось.

При установке только для пользователя (не в режиме администратора) приложение не запускается:

Action ended 9:04:52: LaunchApplication. Return value 3.
MSI (c) (F0:94) [09:04:52:151]: Note: 1: 2205 2:  3: Error 
MSI (c) (F0:94) [09:04:52:151]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 2896 
DEBUG: Error 2896:  Executing action LaunchApplication failed.
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: LaunchApplication, , 

Я посмотрел на этот вопрос , в котором есть та же ошибка, но у меня уже есть имя файла в квадратных скобках:

<Property Id="WixShellExecTarget" Value="[#FILE_SweetApp.WPF.exe]" />

Есть идеи?


Редактировать

Это соответствующий код:

<?define MyPath="$(var.SolutionDir)MyApp.WPF\bin\$(var.Configuration)"?>

<ComponentGroup Id="MyApp.WPF"  Directory="APPLICATIONFOLDER">
    <Component Id="MainExecutable" Guid="{my guid}">
        <File Id="FILE_App.WPF.exe" Source="$(var.MyPath)\myapp.exe" />
    </Component>
    ...
</ComponentGroup>

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch app when setup exits." />
<Property Id="WixShellExecTarget" Value="[#FILE_App.WPF.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

<UI>
  <Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT installed</Publish>
</UI>

1 Ответ

1 голос
/ 04 июня 2019

Наилучшее предположение : не видя источника, трудно догадаться, что не так. Я бы сказал, что у вас, вероятно, есть несовпадающая ссылка между значением свойства WixShellExecTarget и File Id файла для запуска?:

<..>

<Property Id="WixShellExecTarget" Value="[#MyFile.exe]" />

<..>

<File Id="MyFile.exe" Source="C:\MyFile.exe">

<..>

Документация WiX : Пример этого есть в документации WiX: Пример WiX для запуска приложения (для последующего использования в других).

Образец макета : Вот образец, основанный на вышеуказанной ссылке. Сначала необходимо: (1) создать новый проект WiX 3, 2) добавить ссылки на WixUIExtension.dll и WixUtilExtension.dll :

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<!--NOTE #1: Add an UpgradeCode GUID below -->

  <Product Id="*" Name="WiX Dialog Testing" Language="1033" Version="1.0.0.0"
           Manufacturer="Hobbit" UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate EmbedCab="yes" />

    <UI>
      <UIRef Id="WixUI_Advanced" />

      <!-- Folder redirect dialog events -->
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="1" Order="3">WixAppFolder = "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="{}" Order="2">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="DoAction" Value="WixSetDefaultPerMachineFolder" Order="3">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="DoAction" Value="WixSetDefaultPerUserFolder" Order="3">WixAppFolder = "WixPerUserFolder"</Publish>

      <!-- Launch application dialog event -->
      <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
    </UI>

    <!-- Launch application constructs NOTE! Added 'Secure="yes"' -->
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name Test" Secure="yes" />
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" Secure="yes" /> <!-- Checked by default = 1 -->

<!--NOTE #2: Make Value match File Id in component / file entry below -->

    <Property Id="WixShellExecTarget" Value="[#MyFile.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <!-- Folder redirect constructs -->
    <Property Id="ApplicationFolderName" Value="PerUserPerMachine" />
    <Property Id="WixAppFolder" Value="WixPerMachineFolder" />

    <Feature Id="ProductFeature" Title="WiX Dialog Testing" Level="1" />

    <Directory Id="TARGETDIR" Name="SourceDir">

      <Directory Id="DesktopFolder" />
      <Directory Id="ProgramFilesFolder">

<!--NOTE #3: Make sure Directory Id is APPLICATIONFOLDER -->

        <Directory Id="APPLICATIONFOLDER" Name="WiX Dialog Testing">

<!--NOTE #4: Add a component GUID below, adjust source file path, set File Id -->

            <Component Feature="ProductFeature" Guid="PUT-GUID-HERE">
              <File Id="MyFile.exe" Source="C:\MyFile.exe">
                <Shortcut Id="AppDesktopShortcut" Name="WiX Dialog Testing" Directory="DesktopFolder"  />
              </File>
              <RegistryValue Root="HKCU" Key="Software\My Company\My Product" Name="installed" Type="integer" Value="1" KeyPath="yes" />
            </Component>

        </Directory>
      </Directory>
    </Directory>

  </Product>

</Wix>
...