【问题标题】:Locating the installation location of a 3rd party application in an .msi project in MSVS在 MSVS 的 .msi 项目中定位第 3 方应用程序的安装位置
【发布时间】:2009-05-22 00:45:32
【问题描述】:

上下文:我有一些插件(实际上只是具有不同扩展名的 DLL)需要安装在第 3 方应用程序的子文件夹中。通常只需将它们复制到所述文件夹就足够了,但有时还需要安装其他库。我想让这个过程对用户来说不太容易出错,所以我研究了使用 Visual Studio 中的安装程序项目来创建一个 .msi,但我无法正确配置安装位置。

似乎它假定安装程序是为一个完整的应用程序而设计的,并且默认为 C:\Program Files\MyApp\ 等位置,但我真正需要的是 C:\Program Files\\Plugins。我不想假设用户在任何特定位置安装了第 3 方应用程序,所以我想要的是一种定位其他应用程序安装位置的方法。我已经搜索了微软的文档并自己进行了一些实验,但没有任何成功。

假设这是可能的,有人知道如何完成我想要的吗?

【问题讨论】:

    标签: windows dll installation visual-c++


    【解决方案1】:

    大多数应用程序会将其安装位置写入注册表中的某个位置。我们读取以下注册表项下的值以查找 Microsoft Word 安装位置。

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe]
    

    很遗憾,没有标准方法可以检索特定应用程序的安装位置。您必须搜索注册表才能找到所需的内容。

    【讨论】:

      【解决方案2】:

      如果您的应用程序使用 Windows 安装程序,您可以尝试这种方法 (C#):

          Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
          Installer msi = (Installer)Activator.CreateInstance(type);
          foreach (string productcode in msi.Products)
          {
              string productname = msi.get_ProductInfo(productcode, "InstalledProductName");
              if (productname.Contains("<YOUR PRODUCT NAME HERE>"))
              {
                  string installdir = msi.get_ProductInfo(productcode, "InstallLocation");
                  Console.WriteLine("{0}: {1} @({2})", productcode, productname, installdir);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多