TPath.GetTempFileName
(包含 WinAPI GetTempFileName
)在从登录到域的用户运行的应用程序调用时回复“目录名称无效” .
如果他们使用未使用域的登录名,则可以。
遇到问题的客户在另一个国家,我也不熟悉如何更改域 Controller 的配置来避免这个问题。
我假设由于我的应用程序无法正常工作,所以我应该以不同的方式获取临时文件名。
“以管理员身份运行”没有帮助。
我已指示他们确保他们可以完全控制 TEMP 和 TMP 系统环境变量中提到的文件夹,显然他们可以控制,但仍然会出现相同的错误。
我的应用程序是 Win32 Delphi 桌面应用程序,但由于 Windows 是错误的来源,我认为此信息的用处有限。
Windows 10 是操作系统。
最佳答案
TPath.GetTempFileName
在最开始调用 TPath.GetTempPath
但在使用返回的调用 Winapi.Windows.GetTempFileName
之前不检查它路径。
很可能调用 TPath.GetTempPath
返回空路径或无效路径。
MSDN说:
The
GetTempPath
function checks for the existence of environment variables in the following order and uses the first path found:
- The path specified by the
TMP
environment variable.- The path specified by the
TEMP
environment variable.- The path specified by the
USERPROFILE
environment variable.- The Windows directory.
如果它返回 Windows 目录,则调用不会因上述消息而失败。因此,这三个环境变量之一可能存在错误路径。
您的客户应该检查这些变量并验证它们是否存在。 你说,路径“显然”没问题。
经验告诉我怀疑客户所说的他们检查过的内容......您可以在调用 TPath.GetTempFileName
之前自行调用 TPath.GetTempPath
来检查是否它存在。或者,您可以在失败的情况下调用它作为处理引发的异常的一部分,并将路径添加到错误消息中。
关于windows - TPath.GetTempFileName 回复 "The directory name is invalid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127373/