我们的应用程序是Excel加载项。我们使用Wix 3.10来构建MSI。目前,即使使用连接的加载项运行Excel,我们也可以执行应用程序的卸载。 如果Excel正在运行,我需要中断卸载过程。我们不需要关闭Excel,我只需要检测它是否正在运行。如果是这样,我需要向用户显示相应的消息并停止卸载过程。如何检测是在卸载过程中运行的Excel(任何应用程序)? 我可以使用"标准" MSI / Wix功能还是应该编写一些自定义操作?
答案 0 :(得分:3)
如果excel进程正在运行,您需要自定义操作来查询Windows,并使用结果设置属性。然后,您可以在启动条件(条件元素)中使用它来通知用户并阻止安装。
答案 1 :(得分:0)
最后,我实现了自己的自定义操作。此操作将在任何安装模式下触发:安装/卸载/修复等。操作显示消息框,要求用户关闭Excel并有两个按钮'重试'和'取消'。如果用户按“重试”按钮代码重复检查是Excel运行,'取消'当用户被要求继续或真正取消时,会导致另一个对话框。
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);