Windows Server 2019 阻止将新编译的 DLL 保存在用户文档中

Windows Server 2019 阻止将新编译的 DLL 保存在用户文档中

读取 C# 源代码并将其编译为 DLL 的应用程序在尝试将此 DLL 保存到用户的 Documents 文件夹内的磁盘时抛出错误,例如“c:\Users\<user>\Documents\myapplication\some-folder\new.DLL”,该应用程序抛出异常,这是由 Windows Server 2019 声称“路径不存在”引起的。

我向你保证,这条路存在:

  • 有时有效的方法是:将用户添加到“高级用户”组

  • 总是有效:将用户添加到“管理员”组

后者不是一个选择(不应该是一个选择)。

  • Windows 服务器 2019
  • 该应用程序由拥有“Documents”文件夹的用户运行
  • 该应用程序可以创建、重命名、删除、读取、写入任何其他文件或文件夹
  • 该文件夹不受防病毒软件、防御程序等的保护。

我猜测该应用程序的行为可能被视为恶意行为(但事实并非如此!这是一款允许使用 c# 编写任务脚本的游戏,并使用该技术来提高速度),并且某些东西试图保护此处的其他东西。但我不知道该怎么做以及如何阻止它。

答案1

导致此问题的真正原因是创建 DLL 文件的进程是由远程访问服务器的用户启动的(例如使用 RDP)。这时,一个模糊的 Windows 组策略模板设置就会出现:“为每个会话使用单独的临时文件夹”(请参阅​​:https://devblogs.microsoft.com/oldnewthing/20110125-00/?p=11673)。

因此,抛出的异常

> System.Exception: (0,0): error CS0016: Could not write to output file
> "c:\Users\theuser\Documents\somefolder\new.dll" -- "The directory name is invalid."

完全误导:无效的目录名不在要创建 DLL 的路径中,但实际上是 TEMP 或 TMP 环境变量中设置的临时文件路径的一部分(例如“TMP=C:\Users...\AppData\Local\Temp\2”中的“2”)。

您可以检查当前的通过在命令行窗口中使用 set 命令设置 TEMP 和 TMP 的值。突出显示“当前”,因为“当前”可能与“设置”不同(例如在我的帐户、环境中)。

相关内容