【问题标题】:Store msi path when it’s copied to windows installer复制到 Windows 安装程序时存储 msi 路径
【发布时间】:2019-11-08 23:24:16
【问题描述】:

我目前正在开发一个包含安装程序项目的 C# 项目。在安装过程中,有什么方法可以访问复制的 MSI 文件的路径(尤其是名称)(它被缓存在 C:\Windows\Installer 中)?

我想将其存储在文本文件中的某个位置,以便能够直接从表单中卸载我的应用程序。

【问题讨论】:

    标签: c# windows-installer installation


    【解决方案1】:

    卸载:不需要直接访问该文件,有很多方法可以卸载而不使用缓存的文件名: Uninstalling an MSI file from the command line without using msiexec.

    最简单的就是卸载by product code:

    msiexec.exe /x {PRODUCT-CODE-1111-1111-11111111111X}
    

    你可以卸载by upgrade code2),或者by name


    您不会尝试卸载从其自己的 GUI 运行的应用程序,是吗? :-) 触犯法律。触犯法律。不会尝试。


    LocalPath:还有几种方法可以通过 MSI API 检索本地缓存路径:

    On Error Resume Next
    Set installer = CreateObject("WindowsInstaller.Installer")
    
    ' The product name you search for:
    search = "Windows SDK EULA"
    
    For Each product In installer.ProductsEx("", "", 7)
       name = product.InstallProperty("ProductName")
       cachepath=product.InstallProperty("LocalPackage")
       If name = search Then
          MsgBox name + ": " + cachepath
          Exit For
       End If
    Next
    


    链接

    【讨论】:

    • 感谢您的回答!最后一部分完美地做到了!只是一个问题,您为什么说从应用程序本身内卸载会违反法律?不幸的是,我需要按照客户的要求这样做,尽管我也觉得这非常危险和尴尬!
    • 那只是个玩笑。然后您必须快速关闭以使其正常工作,是否需要保存任何打开的文档?也许它只是一个观众?这是非常不标准的:-)。不推荐它,人们应该从“添加/删除”小程序中卸载。我刚刚写了an answer showing how to launch that applet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多