MSI如何检测是Excel运行

时间:2016-06-24 11:42:28

标签: excel wix windows-installer excel-addins

我们的应用程序是Excel加载项。我们使用Wix 3.10来构建MSI。目前,即使使用连接的加载项运行Excel,我们也可以执行应用程序的卸载。 如果Excel正在运行,我需要中断卸载过程。我们不需要关闭Excel,我只需要检测它是否正在运行。如果是这样,我需要向用户显示相应的消息并停止卸载过程。如何检测是在卸载过程中运行的Excel(任何应用程序)? 我可以使用"标准" MSI / Wix功能还是应该编写一些自定义操作?

2 个答案:

答案 0 :(得分:3)

如果excel进程正在运行,您需要自定义操作来查询Windows,并使用结果设置属性。然后,您可以在启动条件(条件元素)中使用它来通知用户并阻止安装。

答案 1 :(得分:0)

最后,我实现了自己的自定义操作。此操作将在任何安装模式下触发:安装/卸载/修复等。操作显示消息框,要求用户关闭Excel并有两个按钮&#39;重试&#39;和&#39;取消&#39;。如果用户按“重试”按钮代码重复检查是Excel运行,&#39;取消&#39;当用户被要求继续或真正取消时,会导致另一个对话框。 C#中有动作(请注意,此代码使用Wix SDK://Added XmlRootElement and XmlElement for list @XmlRootElement(name = "Receipts") public class Receipts { private List<Receipt> receipts; @XmlElement(name = "Receipt") public List<Receipt> getReceipts() { //Added XmlElementWrapper and XmlElement for list public class Receipt { private String shop; private Date date; //Changed to Date because marshalling is directly supported private Double total; private List<Entry> items ; @XmlElementWrapper(name="Items") @XmlElement(name = "Item") public List<Entry> getItems() { //No changes public class Entry { private String name; private Double price; ):

JAXBContext jaxbContext = JAXBContext.newInstance(Receipts.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(receipts, new File(file);