如何卸载我自己的wpf应用程序

时间:2017-07-13 11:18:07

标签: c# wpf windows-installer installshield

我创建了WPF应用程序并创建了设置并安装在系统上(手动)。现在我想通过c#程序卸载这个应用程序。通过这种方式我们想要安装这个应用程序的新版本。但是如何? 感谢。

2 个答案:

答案 0 :(得分:0)

这就是我建议你去实现目标的方式!注意:我解释的方法是在普通的visual studio安装程序项目中可以执行的操作。对于安装屏蔽,步骤可能看起来不同,但它遵循相同的策略。

  1. File System on Target machine - >添加Special Folder,选择System Folder
  2. 进入此系统文件夹添加文件。从本地msiexec.exe文件夹浏览System32并添加。
  3. 覆盖默认属性为:条件= Not Installed,永久= True,系统= True,传递= True重要= False
  4. Application Folder下创建一个新的快捷方式,将目标设置为您在步骤1中创建的System Folder,并将其指向msiexec.exe
  5. 将快捷方式重命名为“卸载应用程序”。
  6. 将参数属性设置为/x [ProductCode]x[之间有空格)
  7. 构建项目
  8. 完成这些步骤后,您将为应用程序创建自己的卸载程序。现在,当您第一次安装应用程序时,它会自动将卸载程序exe粘贴到安装文件夹中。下次安装时,安装程​​序应在安装较新版本之前找到并执行此卸载程序。为此,您可以创建一个vb脚本批处理文件来调用和执行卸载程序。

    Dim WSHShell
    Dim oFSO
    Dim EXEPath
    
    Set WSHShell = CreateObject("WScript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    If Not WSHShell Is Nothing Then
        EXEPath = "C:\Program Files (x86)\Your Application Location\Uninstall Your Application.exe"
    
        If oFSO.FileExists(EXEPath) Then
            WSHShell.Run(EXEPath)
        End If
    End If
    

    将此脚本作为uninstaller.vbs存储在您的应用程序中,并将此文件附加到Application Folder。现在,在您的客户操作安装中,您需要在执行安装之前执行此脚本。

    我希望这有帮助!

答案 1 :(得分:0)

如果您只想安装自己构建和安装的设置,并且它(例如)生成MSI文件的Visual Studio安装项目,那么您只需要知道设置的ProductCode。

然后(在C#中)你P / Invoke到MsiConfigureProduct并传入ProductCode,INSTALLLEVEL_DEFAULT,INSTALLSTATE_ABSENT)。

否则可以将命令msiexec / x {productcode}与您选择的其他命令行选项一起使用。

问题是您正在尝试卸载程序仍在运行的产品,因此存在一种死锁。

如果您使用的是WiX,请执行以下操作:

http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_uninstall_shortcut.html