Открыть PDF-файл после установки WiX, не показывая ошибок
Я хочу открыть файл PDF после завершения установки WiX.
Соответствующий 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. Но если нет, Windows выдает сообщение "Windows не может открыть этот тип файла".
Есть ли способ получить WiX только для попытки звонка ShellExecute
есть ли приложение, связанное с файлами PDF? Или возможно, чтобы звонок прерывался тихо, без каких-либо ошибок?
1 ответ
Решение
Я решил это, создав "немедленное" управляемое настраиваемое действие, которое запускается после 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;
}