Visual studio 2015 将文件安装到现有程序';s安装路径与Visual Studio安装项目
我正在制作一个VisualStudio安装项目,为目标机器上的现有程序安装一个插件。我的文件需要进入该应用程序的安装目录。我希望能够干净地安装和卸载我的插件,而不会对应用程序本身造成太大的影响 现有程序的安装路径可以在注册表项中找到,并且在各个安装之间可能有所不同 我可以将Visual Studio安装项目配置为从该注册表项读取值,然后将插件文件放入注册表指定的目录(或其子目录)中吗?我是否需要使用自定义操作,或者是否可以使用标准设置项目功能来实现 我注意到,在“启动条件”窗口中,我可以设置注册表搜索启动条件,该条件基于特定注册表项设置安装程序属性。我可以用它来检索密钥的实际值,以便在“文件”窗口中使用,还是仅为启动条件设置真/假值?啊,毕竟在中找到了答案。这是可能的,没有自定义操作 总结:Visual studio 2015 将文件安装到现有程序';s安装路径与Visual Studio安装项目,visual-studio-2015,visual-studio-setup-proje,Visual Studio 2015,Visual Studio Setup Proje,我正在制作一个VisualStudio安装项目,为目标机器上的现有程序安装一个插件。我的文件需要进入该应用程序的安装目录。我希望能够干净地安装和卸载我的插件,而不会对应用程序本身造成太大的影响 现有程序的安装路径可以在注册表项中找到,并且在各个安装之间可能有所不同 我可以将Visual Studio安装项目配置为从该注册表项读取值,然后将插件文件放入注册表指定的目录(或其子目录)中吗?我是否需要使用自定义操作,或者是否可以使用标准设置项目功能来实现 我注意到,在“启动条件”窗口中,我可以设置注册
使用系统;
使用System.IO;
使用Microsoft.Deployment.WindowsInstaller;
///
///此程序修补Visual Studio安装项目生成的MSI文件中的注册表搜索键操作,
///更正Visual Studio安装项目中的x64兼容性错误。
///
///
///这两个错误是:
///1)Visual Studio安装项目包含32位版本的InstallUtilLib.dll,无法加载x64程序集进行反射
///看https://blogs.msdn.microsoft.com/heaths/2006/02/01/64-bit-managed-custom-actions-with-visual-studio/
///2)注册表搜索操作不设置x64位,因此只搜索32位注册表
///看https://social.msdn.microsoft.com/Forums/windows/en-US/40a2c1ee-7dd4-4289-a7d2-30b97239ae25/vs2005-setup-project-launch-conditions-registry-problem-on-x64-operating-systems
///
类设置修补程序
{
静态void Main(字符串[]参数)
{
如果(args.Length!=1)
{
WriteLine(“错误:调用此exe时将MSI文件的名称指定为第一个参数”);
环境。出口(1);
}
字符串msiName=args[0];
使用(var db=new数据库(msname,DatabaseOpenMode.Direct))
{
PatchInstallUtilLib(db);
PatchRegLocator(db);
}
}
///
///将32位InstallUtilLib.dll替换为x64版本
///
///
专用静态void PatchInstallUtilLib(数据库数据库数据库)
{
使用(View View=db.OpenView(@“UPDATE`Binary`SET`Data`=?WHERE`Name`='InstallUtil'))
{
使用(记录rec=新记录(1))
{
String path=path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),
@“Microsoft.NET\Framework64\v4.0.30319\InstallUtilLib.dll”);
记录设置流(1,路径);
查看。执行(rec);
db.Commit();
}
}
}
专用静态无效PatchRegLocator(数据库数据库数据库)
{
//MSI SQL语法记录如下:https://msdn.microsoft.com/en-us/library/windows/desktop/aa372021.aspx
//在中给出的RegLocator表的架构https://msdn.microsoft.com/EN-US/library/aa371171.aspx
//在HKLM注册表根目录中查找原始类型的注册搜索操作
字符串注册表项=@“软件\VendorName\ProductName”;
使用(视图)=
db.OpenView(
@“更新`RegLocator`SET`Type`=?其中`Type`={0}和`Root`={1}以及`Key`='{2}'”,
(Int32)LocatorTypes.RawValue,(Int32)RegistryRoot.LocalMachine,registryKey)
{
使用(记录rec=新记录(1))
{