打包使用ImageMagick C API的应用程序

时间:2010-06-16 02:22:12

标签: windows imagemagick packaging software-distribution

我创建了一个使用ImageMagick C API的小应用程序,但是遇到了一些砖墙。该应用程序工作正常,我准备与我们组织中的其他几个人分享,但我找不到有关分发这样的应用程序的文档,而无需在目标计算机上安装ImageMagick。

这里是否有人提供信息或信息链接,详细说明如何将其打包以进行分发?需要哪些DLL以及在Windows中注册哪些DLL?目标用户将使用XP和Win7。

5 个答案:

答案 0 :(得分:4)

我必须做类似的事情,虽然我自己建造了Imagemagick所以我可以削减脂肪。你可以做的是在你的机器上,使用exe they provide安装dll。在安装过程中,请确保选中“安装C和C ++开发标头和库”框。

然后,install dir将包含include目录中的标头,以及整个树中的dll。您将找到需要在lib中链接的库。虽然有很多dll,这使得这有点问题。

我在构建时最终做的只是创建一个ImageMagick dll和一个.lib文件来链接。我从源代码创建了自己的项目并构建了一个dll。然后,您可以使用源代码中的标头发送您创建的dll和lib。

编辑:我还应声明安装过程仅在您的计算机上进行。然后,您可以从安装路径复制dlls / libs / headers并将其与您的软件包一起发送,而不是要求用户安装除您的应用程序之外的任何内容。

答案 1 :(得分:4)

从来没有找到解决方案,所以这就是我发现的:

使用imageMagikNet.dll和(底层)imageMagik dll,似乎这些lib需要一些注册表项才能正常运行。

这是我运行的ImageMagikNet应用程序的包装......

  1. 编译了ImageMagickNET.dll(http://imagemagick.codeplex.com/) 反对6.5.3-10
  2. 所有CORE_RL * .dll来自安装 ImageMagik 6.5.3-10(ImageMagick-6.5.3-10-Q16-windows-dll.exe)
  3. 所有 来自ImageMagik安装的IM_MOD_RL * .dll 6.5.3-10(ImageMagick-6.5.3-10-Q16-windows-dll.exe)
  4. 来自ImageMagik安装的所有* 90.dll 6.5.3-10(ImageMagick的-6.5.3-10-Q16 - 窗口dll.exe)
  5. 来自ImageMagik安装的x11.dll 6.5.3-10

  6. 注册表项,如下所示:

    [HKEY_LOCAL_MACHINE \ SOFTWARE \的ImageMagick]

    [HKEY_LOCAL_MACHINE \ SOFTWARE \ ImageMagick的\ 6.5.3]

    [HKEY_LOCAL_MACHINE \ SOFTWARE \ ImageMagick的\ 6.5.3 \问:16] “BinPath”= “[TARGETDIR]” “LIBPATH”= “[TARGETDIR]” “CoderModulesPath”= “[TARGETDIR]”

    [HKEY_LOCAL_MACHINE \ SOFTWARE \ ImageMagick的\电流] “版本”= “6.5.3” “QuantumDepth”= DWORD:00000010 “BinPath”= “[TARGETDIR]” “LIBPATH”= “[TARGETDIR]” “CoderModulesPath”= “[TARGETDIR]”

  7. 我知道这可能不是一个干净的方式,因为我在注册表中模拟imageMagik的安装,我不知道如果客户端在他的机器上安装ImageMagik它将如何工作,但到目前为止,这是唯一的我找到的方式。

    我的.net应用仅使用ImageMagik裁剪图像。

    希望它有所帮助...

答案 2 :(得分:3)

我可以建议两种方法:

  1. 使用静态库(ImageMagick站点上提供的二进制文件)并使用这些库编译应用程序(如果您的应用程序是.NET或类似的,可能不可行)
  2. 检查应用程序加载了哪些DLL,并在安装/解包期间将它们放在与可执行文件相同的目录中,因为Windows在搜索DLL时始终包含当前目录
  3. 理论上,您可以使用SxS并使您的软件包使用SxS存储库注册库,并让您的应用程序依赖于它们。虽然我个人是SxS的倡导者,但我怀疑它会带来不必要的复杂性,因为ImageMagick团队似乎没有自己的SxS版本,减少了使用SxS(这是DLL共享)所获得的价值

答案 3 :(得分:2)

除了打包所有二进制文件和模块文件夹之外,您只需设置MAGICK_CODER_MODULE_PATHMAGICK_FILTER_MODULE_PATH环境变量,无需进行注册表项。

请参阅ImageMagick源代码中的module.c,函数GetMagickModulePath

答案 4 :(得分:1)

this页面上的描述看起来,列出的最后一个Windows软件包ImageMagick-6.6.2-Q16-windows.zip在没有安装程序的情况下打包,适用于需要的应用程序做自己的安装和配送。这听起来最接近你想要的。