读取 C# 源代码并将其编译为 DLL 的应用程序在尝试将此 DLL 保存到用户文档文件夹中的磁盘时抛出错误,例如“c:\Users\<user>\Documents\myapplication\some-folder\ new.DLL”,应用程序抛出一个异常,该异常是由 Windows Server 2019 声称“路径不存在”引起的。
让我向你保证,路径确实存在:
有时有效:将用户添加到“高级用户”组
什么总是有效:将用户添加到“管理员”组
后者是(不应该)不是一种选择。
- 视窗服务器 2019
- 该应用程序由拥有“文档”文件夹的用户运行
- 该应用程序可以创建、重命名、删除、读取、写入任何其他文件或文件夹
- 有问题的文件夹免于防病毒、防御者等。
我有根据的猜测,应用程序的行为可以被视为恶意的(它不是!,它是一个允许在 c# 中编写任务脚本并使用该技术来提高速度的游戏)并且某些东西试图在这里保护其他东西。但我不知道是什么以及如何阻止它。
这个问题的真正原因是创建 DLL 文件的进程是由远程访问服务器的用户启动的(例如使用 RDP)。只有这样一个不起眼的 Windows 组策略模板设置才会出现:“为每个会话使用单独的临时文件夹”(请参阅:https ://devblogs.microsoft.com/oldnewthing/20110125-00/?p=11673 )。
所以,抛出的异常
完全误导:无效的目录名称不在要创建 DLL 的路径中,而实际上是在 TEMP 或 TMP 环境变量中设置的临时文件路径的一部分(例如“TMP=C 中的“2”: \Users...\AppData\Local\Temp\2”)。
您可以在命令行窗口中使用 set 命令检查 TEMP 和 TMP 的当前值。“当前”被突出显示,因为“当前”可能与“设置”有很大不同(例如在我的帐户、环境中)。