我有一个 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,所以我不确定这怎么可能。
任何想法代码有什么问题?