在Jenkins机器上需要DevEnv而不安装VS-需要api-ms-win-core-heap-l2-1-0.dll

时间:2018-11-27 07:11:52

标签: jenkins windows-installer

我需要在jenkins机器(Windows Server 2012 R2)上构建vdproj,这需要devenv.exe而不是msbuild。我无法安装Visual Studio。 MSI软件包需要Devenv.exe。

我已经使用了进程监视器,并确定我还需要一个文件来使devenv.exe正常工作:api-ms-win-core-heap-l2-1-0.dll

此文件在我们拥有的任何开发人员计算机上都不存在,并且devenv.exe / devenv.com在开发人员计算机上可以运行。

在哪里可以找到此文件? 还有其他方法可以在不使用Visual Studio的情况下构建vdproj吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

虚拟机 :恐怕听起来有些毛茸茸。您能否使用虚拟机(带有Visual Studio)来构建相关的Visual Studio Installer项目?

WiX等 :除了Visual Studio Installer项目外,还转换为WiX or another deployment tool可以解决此问题吗?这是一个非常复杂的安装程序吗?使用WiX反编译器 dark.exe 将MSI反编译为WiX标记可以帮助您将安装程序转换为WiX格式。成功进行此操作需要相当多的WiX知识。也许顾问可以快速执行某些操作?取决于复杂性。

Windows API设置 :据我了解, api-ms-win-core-heap-l2-1-0.dll Windows API-set,而不是真实文件或真实依赖项。这些是Windows中的新构造。尝试使用 Dependency Walker 打开此类API设置文件,以查看它们重定向到的内容。这些API集非常神秘:

  

API集是Win32 API列表的强名称。惯例   为API集分配强名称的方法是使用看起来像是   dll名称。但是API集的目的是提供架构   API集名称及其关联的主机DLL之间的分隔   实施以提高应用程序的可移植性,因此   将API集的名称视为唯一的字符串,而不是   作为dll名称。对于延迟加载,请使用API​​集的名称。

     

API集依靠库加载程序中的操作系统支持来   有效地将名称空间重定向组件引入   库绑定过程。受各种输入的约束,包括API   设置名称和绑定(导入)上下文,库加载程序执行   引用到目标主机二进制文件的运行时重定向   包含API集的适当实现。

     

提供的实施合同和接口合同之间的脱钩   API集提供许多工程优势,但也可以   可能减少进程中加载​​的DLL的数量。

在磁盘上,我可以在 %SystemRoot%\WinSxS %SystemRoot%\System32\downlevel 中找到大多数这些API集。

  

Nice article on the technical aspects of this new API-Set feature

复杂的可执行文件 :尽管 devenv.exe 只是一个EXE文件,但我确实认为对于除了dll导入表之外, Visual Studio Installer Projects 很难正确设置,如果所有版本都可能在没有警告的情况下失败,那么将来的发行版呢? (如果发生了某些变化-最近,Visual Studio一直是一个非常动人的目标)。


  

WiX快速入门 :以下是我一段时间以来发现的WiX最佳链接: