在 32 位进程下运行的 GhostscriptLibraryNotInstalledException 需要本机库

Posted

技术标签:

【中文标题】在 32 位进程下运行的 GhostscriptLibraryNotInstalledException 需要本机库【英文标题】:GhostscriptLibraryNotInstalledException running under 32-bit process requires native library 【发布时间】:2015-12-24 14:14:38 【问题描述】:

在 Visual Studio 2013 中使用 nuget,我将 Ghostscript.NET 安装到我的 Windows x64 PC 上的项目中。

为了确保我没有发疯,我检查了它:

PM> Install-Package Ghostscript.NET
'Ghostscript.NET 1.2.0' already installed.
Project already has a reference to 'Ghostscript.NET 1.2.0'.

PM> 

该项目被多个开发人员使用。它针对任何 CPU,并且需要保持这种状态。

这是我的代码:

public static void GhostscriptNetProcess(String fileName, String outputPath)

    var version = GhostscriptVersionInfo.GetLastInstalledVersion();
    var source = (fileName.IndexOf(' ') == -1) ? fileName : String.Format("\"0\"", fileName);
    var output_file = (outputPath.IndexOf(' ') == -1) ? outputPath : String.Format("\"0\"", outputPath);
    var gsArgs = new List<String>();
    gsArgs.Add("-q");
    gsArgs.Add("-dNOPAUSE");
    gsArgs.Add("-dNOPROMPT");
    gsArgs.Add("-sDEVICE=pdfwrite");
    gsArgs.Add(String.Format(@"-sOutputFile=0", output_file));
    gsArgs.Add("-f");
    gsArgs.Add(source);
    var processor = new GhostscriptProcessor(version, false);
    processor.Process(gsArgs.ToArray());

每当我尝试调试应用程序时,都会收到以下错误消息:

GhostscriptLibraryNotInstalledException 未处理

Ghostscript.NET.dll 中出现“Ghostscript.NET.GhostscriptLibraryNotInstalledException”类型的未处理异常

附加信息:此托管库在 32 位进程下运行,需要在此机器上安装 32 位 Ghostscript 本机库!要下载正确的 Ghostscript 原生库,请访问:http://www.ghostscript.com/download/gsdnld.html

查找Ghostscript.NET.GhostscriptLibraryNotInstalledException 并没有提供任何有用的信息,尽管this post on CodeProject 表明调试器正在32 位模式下运行,而我安装的是64 位版本。

这一切都很好,但我该如何测试我编写的使用 Ghostscript 的新代码?

【问题讨论】:

您的项目似乎设置为 x86(32 位),这需要在该机器上安装 32 位本机 Ghostscript 库...或将您的项目更改为混合(x86/x64)- 我无法安装 32 位版本或提取源代码。见Ghostscript Bug 696481。 【参考方案1】:

如果您使用 MS Test 进行测试,则必须设置运行测试的处理器架构,因为 Ghostscript.Net 会验证进程架构 (Environment.Is64BitProcess) 以在注册表中搜索 ghostscript 安装。

在菜单 > 测试 > 测试设置 > 默认处理器架构 > X64。

【讨论】:

我遵循了这个过程。但现在仍然出现同样的错误 我从ghostscript.com/download/gsdnld.html下载了gs922w32.exe。并安装它。现在它正在工作【参考方案2】:

你真的安装了 Ghostscript 吗?

Ghostscript.NET 只是 Ghostscript 的一个 .NET 接口,在我看来它像这样的消息:

“这个托管库在 32 位进程下运行,需要在这台机器上安装 32 位 Ghostscript 本机库!要下载正确的 Ghostscript 本机库,请访问:http://www.ghostscript.com/download/gsdnld.html”

试图告诉您您没有安装 32 位版本的 Ghostscript。它甚至会告诉您去哪里下载副本。

那么你安装了 Ghostscript 吗?你安装了 32 位版本的 Ghostscript 吗?

【讨论】:

以上是关于在 32 位进程下运行的 GhostscriptLibraryNotInstalledException 需要本机库的主要内容,如果未能解决你的问题,请参考以下文章

检查正在运行的进程是 32 位还是 64 位

在 64 位操作系统上,32 位进程可以访问多少内存?

如何从 32 位进程读取 64 位注册表项?

如何使 .NET 可执行文件在 64 位操作系统上作为 32 位进程运行?

32位程序下调用64位函数——进程32位模式与64位模式切换

在 64 位机器上捕获的 32 位进程的调试转储