Wix 安装程序完成时启动应用程序未在用户模式下工作

Wix 安装程序完成时启动应用程序未在用户模式下工作,wix,windows-installer,Wix,Windows Installer,我正在创建一个带有复选框的双模式安装程序,以允许用户在安装后启动应用程序 在机器范围内安装(管理模式)时,应用程序将按预期启动 仅为用户安装时(非管理员模式),应用程序不会启动: 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: 22

我正在创建一个带有复选框的双模式安装程序,以允许用户在安装后启动应用程序

在机器范围内安装(管理模式)时,应用程序将按预期启动

仅为用户安装时(非管理员模式),应用程序不会启动:

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, , 
我已经查看了哪个文件有相同的错误,但我已经将我的文件名放在方括号中:

有什么想法吗


编辑

以下是相关代码:

<?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>

...
WIXUI_EXITDIALOGOPTIONALCHECKBOX=1且未安装

编辑2

虽然在安装程序完成后启动应用程序对新安装的应用程序不起作用,但奇怪的是,它在我更新应用程序时起作用

我认为它可能与.NET版本有关,因为它似乎有与我相同的症状。根据这篇文章,自定义操作的空参数是转移注意力的,因为自定义操作很可能根本不运行

最佳猜测:如果看不到来源,就很难猜出什么是错的。我想说您可能在
WixShellExecTarget
属性值和要启动的文件的
文件Id
之间存在不匹配的引用:

<..>

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

<..>

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

<..>
问题是
#FILE_App.WPF.exe

<Property Id="WixShellExecTarget" Value="[#FILE_App.WPF.exe]" />
而不是实际安装位置:

%userprofile%\AppData\Local\Apps\MySweetApp\MySweet.exe
因此,
LaunchApplication
自定义操作无法找到.exe并失败

解决方案是使用正确的.exe位置创建自定义属性(
ExeLocation
),并将其用于自定义操作:

<Property Id="WixShellExecTarget" Value="[ExeLocation]" />


我已经添加了我认为相关的代码。让我困惑的是,它在机器范围内安装时有效,但在为用户安装时无效。当我硬编码.exe的路径时,它会工作。我猜为用户安装时路径是错误的?但是我认为
[#FILE_App.WPF.exe]
可以解析到安装该文件的任何位置?请参阅我的其他评论(如上)。您是否应该尝试使用不同且更简单的ID进行测试?请改为尝试
MyFile.exe
。在此之前,请在干净的虚拟机上以及在按用户安装期间进行尝试。检查一下,什么是干净的虚拟机?干净的虚拟机?文件似乎已计划安装:
MSI(68:B8)[09:04:46:780]:组件:main可执行文件;安装:不存在;请求:当地;操作:本地
。而且它必须找到文件,因为我可以在安装后从“开始”菜单启动应用程序。简单的id为
MyFile.exe
:/日志文件应该告诉您更多信息,但它看起来只是有一个空字符串作为参数?首先,您可以将条件的最后一部分更改为
已安装
,而不是
已安装
。首先尝试一下,看看这是否重要。如果换成
已安装
,运气就不好了。我想你是对的,这个参数是一个空字符串,所以它自然不知道要启动什么。不幸的是,我无法让它工作。我最终删除了该复选框。在尝试删除该复选框时,它突然开始工作:/同一代码,甚至没有重新启动Visual Studio。我不知道为什么它不起作用……这真是奇怪。你没有改变包裹的咬口,是吗?(64位)。如果你发现了那是什么,请告诉我们。你还有一个出现故障的微星吗?您可以使用Dark.exe或其他MSI工具区分它们。我稍后会更新。出发。
%userprofile%\AppData\Local\Apps\MySweetApp\MySweet.exe
<Property Id="WixShellExecTarget" Value="[ExeLocation]" />