WiX 安装后打开 PDF 文件,不显示任何错误

Open PDF file after WiX installation, without showing any errors

我想在 WiX 安装程序完成后打开 PDF 文件。

我目前拥有的相关WiX XML是:

<Property Id="WixShellExecTarget" Value="[#Manual.pdf]" />

<CustomAction Id="ShowManual" 
    Return="ignore" 
    BinaryKey="WixCA"
    DllEntry="WixShellExec" 
    Impersonate="yes" />

<InstallExecuteSequence>
    <Custom Action="ShowManual" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

这在安装了 PDF reader 的机器上一切正常。但如果没有,Windows 会闪烁一条消息说“Windows 无法打开这种类型的文件”。

如果有与 PDF 文件关联的应用程序,是否有任何方法可以让 WiX 仅尝试调用 ShellExecute?或者是否可以让调用静默失败而不显示任何错误?

我通过创建一个 'immediate' 托管自定义操作来解决这个问题,该操作在 InstallFinalize 之后运行,并使用 FindExecutable 在尝试打开应用程序之前检查它是否与 PDF 文件相关联:

[DllImport("shell32.dll", EntryPoint = "FindExecutable")]
private static extern long FindExecutable(string lpFile, string lpDirectory, StringBuilder lpResult);

[CustomAction]
public static ActionResult ShowPdf(Session session)
{
    var installDir = session["INSTALLDIR"];
    var pdfPath = Path.Combine(installDir, @"My Dir\My.pdf");

    var pdfReaderPath = new StringBuilder(1024);
    long lngResult = FindExecutable(pdfPath, String.Empty, pdfReaderPath);

    if ((lngResult >= 32) && (!String.IsNullOrWhiteSpace(pdfReaderPath.ToString())))
    {
        Process.Start(pdfPath);
    }

    return ActionResult.Success;
}