在不安装 VS 的情况下需要在 Jenkins 机器上使用 DevEnv - 需要 api-ms-win-core-heap-l2-1-0.dll
Need DevEnv on Jenkins machine without installing VS - require api-ms-win-core-heap-l2-1-0.dll
我需要在 jenkins 机器 (Windows Server 2012 R2) 上构建一个 vdproj - 这需要 devenv.exe 而不是 msbuild。我无法安装 Visual Studio。
Devenv.exe 是 MSI 软件包所必需的。
我使用了进程监视器并确定我还需要一个文件才能使 devenv.exe 工作:api-ms-win-core-heap-l2-1-0.dll
这个文件在我们拥有的任何开发机器上都不存在,devenv.exe/devenv.com 在开发机器上工作。
我在哪里可以找到这个文件?
有没有其他方法可以在没有 Visual Studio 的情况下构建 vdproj?
虚拟机:恐怕这听起来有点毛茸茸。您可以使用带有 Visual Studio 的虚拟机来构建有问题的 Visual Studio 安装程序项目吗?
WiX et al:除 Visual Studio 安装程序项目外,转换为 WiX or another deployment tool 可以解决问题吗?这是一个非常复杂的安装程序吗?使用 WiX 反编译器 dark.exe
将 MSI 反编译为 WiX 标记可以帮助您将安装程序转换为 WiX 格式。要成功完成此操作,需要相当多的 WiX 知识。也许顾问可以快速做些什么?取决于复杂程度。
WindowsAPI-set:据我所知api-ms-win-core-heap-l2-1-0.dll
是一个 Windows API-set,而不是真正的文件或真正的依赖项。这些是 Windows 中的新结构。尝试使用 Dependency Walker 打开这样一个 API-set 文件,看看它们重定向到什么。这些 API 集非常神秘:
An API Set is a strong name for a list of Win32 APIs. The convention
for assigning a strong name to an API Set is to use what appears to be
a dll name. But the purpose of an API Set is to provide architectural
separation between the API Set's name and its associated host DLL
implementation for improved portability of your app, so you should
think of an API Set's name as just a unique character string, and not
as a dll name. For delay load, you use the name of the API Set.
API Sets rely on operating system support in the library loader to
effectively introduce a namespace redirection component into the
library binding process. Subject to various inputs, including the API
Set name and the binding (import) context, the library loader performs
a runtime redirection of the reference to a target host binary that
houses the appropriate implementation of the API Set.
The decoupling between implementation and interface contracts provided
by API Sets offers many engineering advantages, but can also
potentially reduce the number of DLLs loaded in a process.
在磁盘上,我在 %SystemRoot%\WinSxS
和 %SystemRoot%\System32\downlevel
[=47= 中找到了大部分 API-Set ].
Nice article on the technical aspects of this new API-Set feature.
Complex Executable:尽管 devenv.exe
只是一个 EXE 文件,例如任何其他,我确实认为 Visual Studio 安装程序项目 将存在依赖关系,而不仅仅是 dll 导入表,这将很难正确设置,以及未来的版本当所有可以在没有警告的情况下失败吗? (如果有什么变化 - Visual Studio 最近一直是一个非常移动的目标)。
WiX Quick Start: Here are some of the best links that I have found over time for WiX:
- Some WiX Quick Start Tips - chaotic, but
upvoted. Must have been helpful.
- Helge Klein's real-world WiX sample - do check this out.
- Rainer Stropek's WiX Samples on Github - can be very helpful.
- From MSI to WiX by Alex Schevchuk - aging content, but excellent.
我需要在 jenkins 机器 (Windows Server 2012 R2) 上构建一个 vdproj - 这需要 devenv.exe 而不是 msbuild。我无法安装 Visual Studio。 Devenv.exe 是 MSI 软件包所必需的。
我使用了进程监视器并确定我还需要一个文件才能使 devenv.exe 工作:api-ms-win-core-heap-l2-1-0.dll
这个文件在我们拥有的任何开发机器上都不存在,devenv.exe/devenv.com 在开发机器上工作。
我在哪里可以找到这个文件? 有没有其他方法可以在没有 Visual Studio 的情况下构建 vdproj?
虚拟机:恐怕这听起来有点毛茸茸。您可以使用带有 Visual Studio 的虚拟机来构建有问题的 Visual Studio 安装程序项目吗?
WiX et al:除 Visual Studio 安装程序项目外,转换为 WiX or another deployment tool 可以解决问题吗?这是一个非常复杂的安装程序吗?使用 WiX 反编译器 dark.exe
将 MSI 反编译为 WiX 标记可以帮助您将安装程序转换为 WiX 格式。要成功完成此操作,需要相当多的 WiX 知识。也许顾问可以快速做些什么?取决于复杂程度。
WindowsAPI-set:据我所知api-ms-win-core-heap-l2-1-0.dll
是一个 Windows API-set,而不是真正的文件或真正的依赖项。这些是 Windows 中的新结构。尝试使用 Dependency Walker 打开这样一个 API-set 文件,看看它们重定向到什么。这些 API 集非常神秘:
An API Set is a strong name for a list of Win32 APIs. The convention for assigning a strong name to an API Set is to use what appears to be a dll name. But the purpose of an API Set is to provide architectural separation between the API Set's name and its associated host DLL implementation for improved portability of your app, so you should think of an API Set's name as just a unique character string, and not as a dll name. For delay load, you use the name of the API Set.
API Sets rely on operating system support in the library loader to effectively introduce a namespace redirection component into the library binding process. Subject to various inputs, including the API Set name and the binding (import) context, the library loader performs a runtime redirection of the reference to a target host binary that houses the appropriate implementation of the API Set.
The decoupling between implementation and interface contracts provided by API Sets offers many engineering advantages, but can also potentially reduce the number of DLLs loaded in a process.
在磁盘上,我在 %SystemRoot%\WinSxS
和 %SystemRoot%\System32\downlevel
[=47= 中找到了大部分 API-Set ].
Nice article on the technical aspects of this new API-Set feature.
Complex Executable:尽管 devenv.exe
只是一个 EXE 文件,例如任何其他,我确实认为 Visual Studio 安装程序项目 将存在依赖关系,而不仅仅是 dll 导入表,这将很难正确设置,以及未来的版本当所有可以在没有警告的情况下失败吗? (如果有什么变化 - Visual Studio 最近一直是一个非常移动的目标)。
WiX Quick Start: Here are some of the best links that I have found over time for WiX:
- Some WiX Quick Start Tips - chaotic, but upvoted. Must have been helpful.
- Helge Klein's real-world WiX sample - do check this out.
- Rainer Stropek's WiX Samples on Github - can be very helpful.
- From MSI to WiX by Alex Schevchuk - aging content, but excellent.