Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使msi将文件安装到相对路径中?_Visual Studio_Windows Installer - Fatal编程技术网

Visual studio 如何使msi将文件安装到相对路径中?

Visual studio 如何使msi将文件安装到相对路径中?,visual-studio,windows-installer,Visual Studio,Windows Installer,我正在使用VisualStudio制作一个msi,将特定文件安装到安装JRE的位置。我无法提供默认路径C:\Program files\Java,因为该路径可能是相对路径,因为用户可以在C:以外的任何驱动器中安装JRE。我该怎么做?是否有一种方法可以从注册表中找到JRE路径并将此路径用作安装位置?基本上,您可以执行注册表搜索并使用自定义文件夹的结果: 根据给你的链接: 注册表位置是JavaHome项目中的HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java运行时环境

我正在使用VisualStudio制作一个msi,将特定文件安装到安装JRE的位置。我无法提供默认路径C:\Program files\Java,因为该路径可能是相对路径,因为用户可以在C:以外的任何驱动器中安装JRE。我该怎么做?是否有一种方法可以从注册表中找到JRE路径并将此路径用作安装位置?

基本上,您可以执行注册表搜索并使用自定义文件夹的结果:

根据给你的链接: 注册表位置是JavaHome项目中的HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java运行时环境。因此,在VS安装项目中,使用该注册表项执行启动条件->搜索目标机器。右键单击Search Target Machine,添加registry Search,然后在属性中选择名称、大写属性(如属性中的JREPATH),在RegKey中使用该键,在ther Root中使用vsdrrHKLM,在值中使用JavaHome

当注册表搜索运行时,它将返回该路径,所以在“目标计算机上的文件系统”视图中,右键单击该节点并选择“添加自定义文件夹”。在该文件夹的属性中,您需要JREPATH In属性,这是最主要的。现在您有了自定义文件夹,将文件添加到该文件夹,就像将文件添加到应用程序文件夹一样


这应该能让你达到目的——主要的问题是我不清楚该注册表位置是32位还是64位位置,并且64位注册表中的VS注册表搜索被破坏,因此需要额外的修复。这应该能让你达到目的。如果在安装过程中记录详细日志,则可以查看注册表搜索是否正常工作。使用msiexec/i/L*vx

在此处查看:实际上,顺序非常简单:找到文件夹并初始化JRE目录此目录下的所有路径都是relative@Vadim如果我需要将该文件安装到JRE中的目录中,该怎么办?如何给出msi的整个相对路径?只需定义一个id为的目录,例如,将JRE_文件夹定义为TARGETDIR的子目录,并将JRE_文件夹用作组件的DirectoryId和所有子文件夹的父目录。当您使用实际值定义JRE_文件夹时,所有路径都将自动解析。@Vadim很抱歉再次打扰您。我是初学者。我正在同一个项目中编写一个cpp代码,它用一个变量显示所需的路径。我是否有可能从这个cpp文件中获取该值,并将其作为msi安装程序的默认位置?如果系统中安装了多个版本的JRE怎么办?在这种情况下,我希望将该文件安装到最新版本java的/lib/ext文件夹中。如何从注册表中获取当前版本(即最新安装版本)的JavaPath?在最初的问题中,需要最新版本是一件好事。因此,您不能在VisualStudio安装程序中执行此操作,因为您不能在安装的早期运行任何代码来枚举已安装的JRE版本并使用最新版本。与其他设置工具相比,VS设置的功能有限。你可以在MSI安装之前运行一个程序来实现这一点——你可以读取这些注册表项,找到所需的路径,然后将其写入你自己的注册表项中,安装将使用我描述的方式。