为什么 .NET 4.0 程序会在安装了 .NET 4.5 的 Windows Server 2012 机器上产生 system.unauthorizedAccess 错误?

Why does a .NET 4.0 program produce a system.unauthorizedAccess error on a Windows Server 2012 machine with .NET 4.5 installed?

我收到一个似乎只发生在机器 运行ning Windows Server 2012 上的错误。我的应用程序是为 .NET 4.0 环境编写的。我的假设是 .NET 4.5 中的某些东西不能很好地与我的应用程序配合使用。我没有其他想法。

该应用程序旨在创建 PDF 文件。它将通过调用自身的多个实例来做到这一点。主应用程序将使用一组参数调用另一个 EXE 文件,这些参数指示要创建哪些 PDF 文件。

这样我们就可以调用多个EXE文件,加快进程。出于测试目的,我可以通过更改设置来禁用对外部程序的调用,这将使用相同的程序创建所有 PDF 文件,只是速度更慢。

PDF 文件将保存到本地硬盘上。用户应该有权访问所有本地驱动器和所有管理员权限。没有隐藏文件夹。

一旦主应用程序调用自身的新实例,它就会崩溃。见下图。要么它不能使用 EXE 文件,要么它不能写入本地驱动器。我不确定是哪个;如果我需要创建一个日志,我会这样做,因此我可以确定应用程序是否无法调用 EXE 文件或者应用程序是否无法写入本地驱动器。

但是,如果我 运行 使用与管理员相同的应用程序,它 运行 是正确的。 运行 从长远来看,作为管理员不是一个可行的解决方案。这让我觉得这不是真正的 .NET 问题。

另一件事,如果我更改设置以在内部创建所有 PDF 文件,它将 运行 正确。这不需要提升的权限。这证明用户应该有权访问驱动器。

安装了 .NET 4.0 的旧系统 Windows Server 2003 运行 稳定(大概)几个月的应用程序。

我正在尝试将应用程序移动到新服务器,Windows Server 2012,默认安装 .NET 4.5 或更高版本。

我在目标系统上没有调试器。 运行在我的开发环境和旧生产环境中一切正常。

问题最终是我引用了一个共享的本地驱动器。出于某种原因,我没有在共享驱动器上写任何东西的权限。我将输出路径从 \\"c-drive\ 更改为 c:\... 。这解决了问题。