在MSVS中的.msi项目中找到第三方应用程序的安装位置

时间:2009-05-22 00:45:32

标签: windows dll installer visual-c++

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

它似乎假设安装程序用于完整的应用程序并默认为C:\ Program Files \ MyApp \等位置,但我真正需要的是C:\ Program Files \\ Plugins。我宁愿不假设用户在任何特定位置安装了第三方应用程序,所以我想要的是找到其他应用程序安装位置的方法。我通过微软的文档进行了搜索并自己进行了一些实验,但没有取得任何成功。

假设这是可能的,有人知道如何实现我的目标吗?

2 个答案:

答案 0 :(得分:0)

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

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

遗憾的是,没有标准的方法来检索特定应用程序的安装位置。您必须搜索注册表以找到您想要的内容。

答案 1 :(得分:0)

如果您的应用程序使用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);
        }
    }