2

我有一个 Wix 自定义操作,它查找 Outlook 并提示用户将其杀死。我不想自己杀死 OL,但希望用户这样做。这是我的自定义操作:

[CustomAction]
    public static ActionResult PromptToCloseOutlook(Session session)
    {
        session.Log("Detecting running instances of Microsoft Outlook...");
        ActionResult retVal = ActionResult.Success;

        Process outlook;
        while (null != (outlook = Process.GetProcessesByName("outlook").FirstOrDefault()))
        {
            session.Log("Microsoft Outlook is running.");

            var result = session.Message(
                // See: http://msdn.microsoft.com/en-us/library/windows/desktop/aa371614(v=vs.85).aspx
                InstallMessage.FilesInUse,
                new Record(null, "outlook.exe", outlook.Id)
            );


            session.Log("User selected option:" + result);

            if (result == MessageResult.Cancel)
            {
                session.Log("User does not wish to close Outlook at this time.");
                retVal = ActionResult.UserExit;
            }
            else if (result == MessageResult.Ignore)
            {
                session.Log("User wished to ignore and proceed.");
                break;
            }
        }
        return retVal;
    }

我将此调用为:

<Custom Action="CA.PromptToCloseOutlook" Before="InstallValidate" />

但是,当它在 Win7 上运行时,它会显示一个空白窗口(但正确地等到 OL 关闭) 空窗

在 WinXP 上,循环永远运行,说 PID 无效。因为,我使用正在运行的实例中的 PID,所以我不确定这怎么可能。

任何想法代码有什么问题?

4

0 回答 0