Wpf 使用MSI包装卸载ClickOnce-错误

Wpf 使用MSI包装卸载ClickOnce-错误,wpf,clickonce,windows-installer,Wpf,Clickonce,Windows Installer,我有clickonce应用程序,其中一个要求是即使在应用程序运行时也要卸载该应用程序。因此,我创建了一个MSI包装器,用于安装clickonce应用程序、更新注册表等,还用于卸载clickonce应用程序 项目结构 ClickOnce应用程序-部署到服务器 控制台应用程序1 这将在安装MSI时启动调用上述url的进程 MSI卸载时,如果clickonce应用程序正在运行,则关闭/终止该应用程序,将读取clickonce卸载字符串,并启动一个试图卸载clickonce应用程序的进程 控制台应

我有clickonce应用程序,其中一个要求是即使在应用程序运行时也要卸载该应用程序。因此,我创建了一个MSI包装器,用于安装clickonce应用程序、更新注册表等,还用于卸载clickonce应用程序

项目结构

  • ClickOnce应用程序-部署到服务器
  • 控制台应用程序1
    • 这将在安装MSI时启动调用上述url的进程
    • MSI卸载时,如果clickonce应用程序正在运行,则关闭/终止该应用程序,将读取clickonce卸载字符串,并启动一个试图卸载clickonce应用程序的进程
  • 控制台应用程序2,安装时创建事件日志源,卸载时删除事件日志源
  • MSI包装器-用于安装和卸载clickonce应用程序
这已设置自定义操作

- Install
    * Primary output from console Application 2
    * Primary output from console Application 1

- Uninstall
    * Primary output from console Application 1
    * Primary output from console Application 2
控制台应用程序1和2钩住安装程序上的安装前和安装后事件

当我安装、创建事件日志源、启动并安装clickonce应用程序时,一切正常。安装部分运行顺利,我没有问题

但是我在卸载时遇到了问题,MSI会卸载自己并调用卸载clickonce的进程,这会引发提示并删除事件日志源

以下是错误详细信息 有一个弹出窗口显示“卸载应用程序未成功”。有关详细信息,请参见“详细信息”

单击详细信息按钮打开错误详细信息文本

PLATFORM VERSION INFO
Windows             : 6.1.7600.0 (Win32NT)
Common Language Runtime     : 4.0.30319.239
System.Deployment.dll       : 4.0.30319.1 (RTMRel.030319-0100)
clr.dll             : 4.0.30319.239 (RTMGDR.030319-2300)
dfdll.dll           : 4.0.30319.1 (RTMRel.030319-0100)
dfshim.dll          : 4.0.31106.0 (Main.031106-0000)

IDENTITIES
Deployment Identity     : XXXXX.Client.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=msil

ERROR SUMMARY
Below is a summary of the errors, details of these errors are listed later in the log.
* Error occurred during store lookup, component store may have been corrupted. Following failure messages were detected:
    + Application is not installed.
* Error occurred during uninstall of the application. Following failure messages were detected:
    + Application is not installed.
* Exception occurred during uninstall of application XXXXX.Client.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=msil. Following failure messages were detected:
    + Shortcut removal could not be completed. Publisher or product value is not valid. 

COMPONENT STORE TRANSACTION FAILURE SUMMARY
No transaction error was detected.

WARNINGS
There were no warnings during this operation.

OPERATION PROGRESS STATUS
* [4/17/2012 10:52:36 AM] : Looking up information from component store.
* [4/17/2012 10:52:36 AM] : Uninstall of application XXXXX.Client.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=msil did not succeed.

ERROR DETAILS
Following errors were detected during this operation.
* [4/17/2012 10:52:36 AM] System.Deployment.Application.DeploymentException (SubscriptionState)
    - Application is not installed.
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.SubscriptionStore.CheckInstalled(SubscriptionState subState)
        at System.Deployment.Application.SubscriptionStore.CheckInstalledAndShellVisible(SubscriptionState subState)
        at System.Deployment.Application.DeploymentServiceCom.MaintainSubscriptionInternal(String textualSubId)
* [4/17/2012 10:52:36 AM] System.Deployment.Application.DeploymentException (SubscriptionState)
    - Application is not installed.
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.SubscriptionStore.CheckInstalled(SubscriptionState subState)
        at System.Deployment.Application.SubscriptionStore.UninstallSubscription(SubscriptionState subState)
        at System.Deployment.Application.DeploymentServiceCom.MaintainSubscriptionInternal(String textualSubId)
* [4/17/2012 10:52:36 AM] System.Deployment.Application.DeploymentException (Subscription)
    - Shortcut removal could not be completed. Publisher or product value is not valid. 
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.ShellExposure.RemoveSubscriptionShellExposure(SubscriptionState subState)
        at System.Deployment.Application.DeploymentServiceCom.MaintainSubscriptionInternal(String textualSubId)

COMPONENT STORE TRANSACTION DETAILS
No transaction information is available.
我尝试了很多方法,但似乎没有任何效果

  • 从注册表读取卸载字符串并启动进程
  • 创建vbsript并将其添加为自定义操作。(objShell.Run“rundll32.exe dfshim.dll,sharpmaintenance XXXXX.Client.application,Culture=neutral,PublicKeyToken=0000000000000000,processorArchitecture=msil”)
  • 创建了一个cmd/bat文件(其中包含rundll32.exe dfshim.dll、sharpmainten XXXXX.Client.application、Culture=neutral、PublicKeyToken=0000000000000000、processorArchitecture=msil),并在卸载时启动该文件
    这三种方法都会抛出相同的错误。但当我分别运行它们时,它们似乎都起作用了。我已经试了两天了,把头发都拔出来了

    你找到解决办法了吗?我面临着同样的问题(每种方法都可以从命令行或直接运行我的脚本中工作,当包含在安装程序中时,任何方法都不起作用)。