[英]Locating the installation location of a 3rd party application in an .msi project in MSVS
上下文:我有一些插件(实际上只是具有不同扩展名的DLL),需要将其安装在第三方应用程序的子文件夹中。 通常,只需将它们复制到所述文件夹就足够了,但是偶尔也需要安装其他库。 我想使此过程对用户而言不那么容易出错,因此我希望在Visual Studio中使用安装程序项目来创建.msi,但是我在正确配置安装位置方面遇到了麻烦。
似乎假定安装程序是用于完整的应用程序,并且默认安装位置为C:\\ Program Files \\ MyApp \\,但是我真正需要的是C:\\ Program Files \\\\ Plugins。 我宁愿不假设用户在任何特定位置都安装了第三方应用程序,所以我想要的是一种找到其他应用程序安装位置的方法。 我已经搜索了Microsoft的文档,并自己做了一些尝试,但是没有取得任何成功。
假设这是可能的,那么有人知道如何实现我想要的吗?
如果您的应用程序使用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);
}
}
大多数应用程序会将其安装位置写入注册表中的某个位置。 我们在下面的注册表项下读取值,以找到Microsoft Word的安装位置。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe]
不幸的是,没有标准的方法来检索特定应用程序的安装位置。 您必须搜索注册表以查找所需内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.